我意识到这可能不是最常用的正则表达式,但我想知道它在理论上是否可行.
给出一个文本文件示例:
MYL3 P08590
MYL3 B2R534
MYL3 Q9NRS8
TM38A Q9H6F2
TM38A A8K9P9
TRFE P02787
TRFE O43890
TRFE Q1HBA5
TRFE Q9NQB8
TRFE Q9UHV0
ETFA P13804
KCRM P06732
KCRM Q96QL9
Run Code Online (Sandbox Code Playgroud)
...只要使用正则表达式,是否可以匹配以与前一行相同的模式开头的行?匹配和替换行(符合条件)没有任何东西将是这样的:
MYL3 P08590
TM38A Q9H6F2
TRFE P02787
ETFA P13804
KCRM P06732
Run Code Online (Sandbox Code Playgroud)
我的猜测是,即使可以使用多行匹配来检查前一行,也不可能只通过正则表达式完成,因为没有定义的模式可以匹配,而只是第一个(几个)连续的单词.它需要将一行的开头定义为"变量",并将下一行的开头与之比较,据我所知,单凭正则表达式是不可能的.
另一方面,一位同事声称可能取决于正则表达式的实施.我以为我会问这里的专家.. :)
你可以使用这个正则表达式:
(?s)(\w+)\s+\w+\r\n(\1\s+\w+(?:\r\n)?)+
Run Code Online (Sandbox Code Playgroud)
(?s) - 启用单行选项(\w+) - 字母数字(组1),一次或多次重复\s+ - 空格,一次或多次重复\w+ - 字母数字,一次或多次重复\r\n(\1\s+\w+(?:\r\n)?)- 组2,一个或多个重复:对组1的反向引用,空格,一个或多个重复,字母数字,一个或多个重复,\r\n零个一个它将匹配:
