是否可以匹配以相同的单词/模式开头的连续行

pos*_*def 5 regex

我意识到这可能不是最常用的正则表达式,但我想知道它在理论上是否可行.

给出一个文本文件示例:

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)

我的猜测是,即使可以使用多行匹配来检查前一行,也不可能只通过正则表达式完成,因为没有定义的模式可以匹配,而只是第一个(几个)连续的单词.它需要将一行的开头定义为"变量",并将下一行的开头与之比较,据我所知,单凭正则表达式是不可能的.

另一方面,一位同事声称可能取决于正则表达式的实施.我以为我会问这里的专家.. :)

Kir*_*huk 5

你可以使用这个正则表达式:

(?s)(\w+)\s+\w+\r\n(\1\s+\w+(?:\r\n)?)+
Run Code Online (Sandbox Code Playgroud)
  1. (?s) - 启用单行选项
  2. (\w+) - 字母数字(组1),一次或多次重复
  3. \s+ - 空格,一次或多次重复
  4. \w+ - 字母数字,一次或多次重复
  5. \r\n
  6. (\1\s+\w+(?:\r\n)?)- 组2,一个或多个重复:对组1的反向引用,空格,一个或多个重复,字母数字,一个或多个重复,\r\n零个一个

它将匹配:

在此输入图像描述