2013-03-24 45 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

相关问题