假设我有一条字符串:
Speaker 1:
Lorem ipsum
Speaker 1:
This is text
Speaker 1:
Another one
Speaker 2:
Yadda Yadda
Speaker 1:
Text
Speaker 2:
New text我想删除第二和第三次出现的Speaker 1:,但保留第一和第四次通过正则表达式。我试着使用(Speaker 1:)(.|\n)*((Speaker 1:))(.|\n)*(Speaker 2:)来访问这些组,但是没有成功。如何只访问包含Speaker 1:的重复行(后面是Speaker 2: )
发布于 2022-07-24 15:22:50
您可以使用捕获组来保留第一个事件。
然后匹配使用反向引用以相同的Speaker、位数和:开头的所有连续部分。
在替换中,使用第1组来保持第一次出现。
^((Speaker \d+:)(?:\n(?!Speaker ).*)*)(?:\n\2(?:\n(?!Speaker ).*)*)*^开始( Capture group 1 (Speaker \d+:)捕获组2匹配扬声器和1+数字(?:\n(?!Speaker ).*)*匹配所有不以Speaker开头的行)闭组1(?:非捕获群\n\2匹配组1的换行符和反向引用(?:\n(?!Speaker ).*)*匹配换行符和所有不以Speaker开头的行)*关闭非捕获组并可选择地重复它https://stackoverflow.com/questions/73099547
复制相似问题