2013-03-24 39 views
0

我想獲取特定字符串的所有出現次數,例如, police officer在一個文本文件,該文本文件有很多空白的,它可能是這樣的:計算文本文件中的特定字符串[空白噪聲]

T h e r a p i s t r a n f r o m t h e p o l i c e 
o f f i c e r, d o w n M a i n S t r e e t. 

還是以最簡單的形式:

The rapist ran from the police officer, down Main Street. 

我在VBA或PHP知識淵博,但會對其他快速解決方案開放。

我在想Regex,但沒有把握,如果有辦法的話。

+1

這看起來像UTF-16。您可以以UTF-16格式打開文件並按照正常方式閱讀。 – nhahtdh 2013-03-24 14:15:08

+0

我不確定你的意思。我已經得到了文本文件,並且它們是可讀的 – Spurious 2013-03-24 14:15:58

+0

您是否在說單詞中的字母之間可能存在一個或多個空格或製表符?你需要保持單詞邊界嗎?你是在尋找字符串(例如單詞的一部分),或者是由完整單詞組成的完整單詞和短語,還是混合了全部單詞和部分單詞(例如忽略複數)?你希望「警察」滿足對「警官」的搜索。 – Tim 2013-03-24 14:16:17

回答

1

你可以把空格放在正則表達式中,這裏的搜索字符串就像p\s*o\s*l\s*i\s*c\s*e\s+o\s*f\s*f\s*i\s*c\s*e\s*r\s*。如果您想要包含選項卡,則可以將\s*更改爲[\s\t]*。當然,您可以自動創建這些搜索字符串。

如果你想先嚐試正則表達式,也有大量的在線資源,對於這一點,例如http://regexpal.com/

+0

您的方法與其他答案有相同的問題。通過允許任意間隔,你完全忽略了字邊界。 「強姦犯」與「治療師」的例子也適用於此。 – nhahtdh 2013-03-24 18:18:04

0

你可以做這樣的事情(在PHP)的

1)閱讀內容文件轉換成字符串(或行的內容,如果你這樣做是逐行))

2)使用str_replace()函數從字符串

3中去掉任何空格)使用strpos(以看看'policeofficer'是不是我字符串。 (請注意,您還需要從輸入中去除空格)。

4)返回strpos的結果(注意,你需要使用===來測試)。

我不確定這是做到這一點的最有效的方式,但它應該工作。

+0

去掉所有的空格?這將會是一場災難,因爲可能有多種方式來解釋一串文字,而沒有與上下文無關的解析器進行適當的間隔。您通過刪除所有空格來銷燬字邊界。 「強姦犯」與「治療師」 - 意思變化180度。 – nhahtdh 2013-03-24 18:14:33

+0

你有一個好點。但是,根據應用情況,這可能不是問題。例如,如果應用程序有一組搜索條件列表,並且在刪除空格時它們都沒有形成其他詞語。如果這是一個問題,那麼我知道的唯一的其他選擇是使用正則表達式。已經有其他答案解決了如何使用正則表達式來做到這一點。 – starshine531 2013-03-25 22:27:41

+0

其他答案仍然遇到同樣的問題。最好的方法是在搜索之前找到一些線索來規範輸入。 (這是一個問題,你可以嘗試閱讀一些文本,看看你是否可以找到其他的詞 - 實際上很常見)。 – nhahtdh 2013-03-25 23:26:47

相關問題