正则表达式删除除字符串外的所有文本

时间:2018-07-15 03:11:33

标签: regex notepad++ regex-negation

因此,我有一个正则表达式,该正则表达式匹配以提取我要在文本中查找的数据:

([A-Z]+A{5,})

这将在以下示例文本中选择我要查找的代码:

Use these licenses with the VMware ESX build.

Feature               License Code                   Description
-------------------   ----------------------------   --------------------------------------------

CIFS                  CAYHXPKBFDUFZGABGAAAAAAAAAAA   CIFS protocol
FCP                   APTLYPKBFDUFZGABGAAAAAAAAAAA   Fibre Channel Protocol 

我想要的最终结果是对文档进行替换,这将产生一个包含文本的文本文档

CAYHXPKBFDUFZGABGAAAAAAAAAAA,APTLYPKBFDUFZGABGAAAAAAAAAAA

1 个答案:

答案 0 :(得分:3)

您可以像这样在正则表达式中添加替代项:

([A-Z]+A{5,})|\X

然后将其替换为:

(?1$1,)

替换字符串表示,如果匹配了第一个捕获组,则将其替换为$1,,否则将其替换为空。

在注释中,我添加了一个负前瞻性,以避免在匹配的子字符串(如果在末尾找到)之后添加逗号。但是,使用此正则表达式不可避免地要加上多余的逗号。


更好的方法:

(\b[A-Z]++\b(?<=A{5}))|\X

这使用了所有格修饰符和一个后向结尾来结束A s。您不需要寻找A{5,},而只需要寻找A{5}。如果您想匹配这样的字符串,即使在较长的单词中间也可以删除单词边界。