Regex 计算文本文件中的特定字符串[空白噪声]

Regex 计算文本文件中的特定字符串[空白噪声],regex,text,whitespace,Regex,Text,Whitespace,我想获取文本文件中出现的所有特定字符串,例如,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,但愿意接受其他快

我想获取文本文件中出现的所有特定字符串,例如,
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,但愿意接受其他快速解决方案


我在考虑正则表达式,但不确定是否有办法。

你可以在正则表达式中加空格,你的搜索字符串应该是
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]*
。当然,您可以自动创建这些搜索字符串


如果您想先试用正则表达式,有很多在线资源可供使用,例如,您可以这样做(在php中):

1) 将文件内容读入字符串(如果逐行执行,则读取该行内容)

2) 使用str_replace()删除字符串中的所有空白

3) 使用strpos()查看字符串中是否包含“policenciper”。(请注意,还需要从输入中删除空格)

4) 返回strpos的结果(注意,您需要使用===进行测试)


我不确定这是最有效的方法,但它应该能工作。

这看起来像UTF-16。你可以以UTF-16格式打开文件,然后按照正常方式读取。我不知道你的意思。我已经得到了文本文件,它们是可读的。你是说一个单词中的字母之间可能有一个或多个空格或制表符?你需要保持单词边界吗?您是在寻找字符串(例如单词的一部分)还是由完整单词组成的完整单词和短语,或者是完整单词和部分单词的混合(例如忽略复数)?您可能希望“警官”满足对“警官”的搜索。@spusious:一些编码设计用于使ASCII文本可读。我只是建议,文本可能是用UTF-16编码的,这与您的情况非常相似。nhahtdh:我从pdf文件中提取了文本。可能是UTF-16,但我能否用另一种方式解释这些可能性(并非所有的都是这种格式)?蒂姆:是的,中间可能有制表符、新行、空格和其他任何空格字符。理想情况下,我也会寻找部分单词,所以是的,警官也应该搜索警官。去掉所有空格?这将是一场灾难,因为可能有不止一种方法可以在没有适当间距的情况下使用无上下文解析器来解释单词流。您可以通过删除所有空白来破坏单词边界。“强奸犯”对“治疗师”-意思改变了180度。你说得对。但是,根据应用程序的不同,这可能不是问题。例如,如果应用程序有一组搜索词列表,当去掉空格时,没有一个搜索词形成其他词。如果这是一个问题,那么我知道的唯一其他选择就是使用正则表达式。已经有其他答案解决了如何使用正则表达式的问题。另一个答案仍然遇到同样的问题。最好的方法是在搜索之前找到一些线索来规范化输入。(这是一个问题。你可以试着阅读一些文本,看看是否能在其中找到其他单词——事实上这很常见)。我不是说这不是问题,而是在某些情况下可能不是问题。你是对的,如果你在正则表达式中用*来表示空格,你会遇到同样的问题。你的方法会遇到与另一个答案相同的问题。通过允许任意间距,可以完全忽略单词边界<代码>强奸犯与治疗师的例子也适用于此。