我正在使用 Notepad++ 中包含 200.000 多行的文本文件。每行只有一个单词。我需要删除并删除所有仅包含一个字母的单词(例如:I)和仅包含两个字母的单词(例如:as)。
我以为我可以像这样通过常规正则表达式,[a-zA-Z]{1,2}
但我什么都不认识(我正在尝试标记它们)。
我已经完成了手动搜索,并且我知道确实存在该长度的单词,因此只能是我的正则表达式代码错误。任何人都知道如何在记事本++中做到这一点???
干杯,
-梅斯蒂卡
如果您只想删除单词但将行留空,则可以:
^[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)
我不使用记事本++,但我猜这可能是因为你有太多匹配项 - 尝试包括单词边界(你的 exp 将匹配每组 2 个字母)
\b[a-zA-Z]{1,2}\b
您指定的正则表达式应该找到 1 或 2 个字符(即使在 Notepad++ 的查找对话框中),但不是您想的那样。^
您希望正则表达式确保它从行首开始并以and结束$
,分别:
^[a-zA-Z]{1,2}$
Notepad++ 6.0 版引入了 PCRE 引擎,因此如果这在您当前的版本中不起作用,请尝试更新到最新版本。
您似乎使用了不支持显式量词的 Notepad++ 版本:这就是为什么根本没有匹配项(因为{
和}
被视为文字,而不是特殊符号)。
解决方案是使用它们更长的替换:
\w\w?
...但这只是故事的一部分,因为这个正则表达式将匹配任何符号,而不仅仅是简短的单词。为此,您需要这样的东西:
^\w\w?$