4

我正在使用 Notepad++ 中包含 200.000 多行的文本文件。每行只有一个单词。我需要删除并删除所有仅包含一个字母的单词(例如:I)和仅包含两个字母的单词(例如:as)。

我以为我可以像这样通过常规正则表达式,[a-zA-Z]{1,2}但我什么都不认识(我正在尝试标记它们)。

我已经完成了手动搜索,并且我知道确实存在该长度的单词,因此只能是我的正则表达式代码错误。任何人都知道如何在记事本++中做到这一点???

干杯,
-梅斯蒂卡

4

4 回答 4

6

如果您只想删除单词但将行留空,则可以:

^[a-zA-Z]{1,2}$

将其替换为空字符串。^并且$是行首和行尾的锚点(因为 Notepad++ 的正则表达式在多行模式下工作)。

如果要完全删除这些行,请搜索:

^[a-zA-Z]{1,2}\r\n

并替换为空字符串。但是,这在 Notepad++ 6 之前是行不通的,所以要确保你的是最新的。

请注意,您必须替换\r\n为文件的特定行尾!

正如 Tim Pietzker 建议的那样,一个独立于平台的解决方案也可以删除空行:

^[a-zA-Z]{1,2}[\r\n]+

一个独立于平台的解决方案,它不会删除空行,而只会删除带有一个或两个字母的行:

^[a-zA-Z]{1,2}(\r\n?|\n)
于 2012-10-12T15:59:52.807 回答
2

我不使用记事本++,但我猜这可能是因为你有太多匹配项 - 尝试包括单词边界(你的 exp 将匹配每组 2 个字母)

\b[a-zA-Z]{1,2}\b
于 2012-10-12T15:59:50.200 回答
1

您指定的正则表达式应该找到 1 或 2 个字符(即使在 Notepad++ 的查找对话框中),但不是您想的那样。^您希望正则表达式确保它从行首开始并以and结束$,分别:

^[a-zA-Z]{1,2}$

Notepad++ 6.0 版引入了 PCRE 引擎,因此如果这在您当前的版本中不起作用,请尝试更新到最新版本。

于 2012-10-12T16:00:00.857 回答
1

您似乎使用了不支持显式量词的 Notepad++ 版本:这就是为什么根本没有匹配项(因为{}被视为文字,而不是特殊符号)。

解决方案是使用它们更长的替换:

\w\w?

...但这只是故事的一部分,因为这个正则表达式将匹配任何符号,而不仅仅是简短的单词。为此,您需要这样的东西:

^\w\w?$
于 2012-10-12T16:10:17.850 回答