首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex重复线

Regex重复线
EN

Stack Overflow用户
提问于 2022-07-24 15:06:42
回答 1查看 34关注 0票数 1

假设我有一条字符串:

代码语言:javascript
复制
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: )

EN

回答 1

Stack Overflow用户

发布于 2022-07-24 15:22:50

您可以使用捕获组来保留第一个事件。

然后匹配使用反向引用以相同的Speaker、位数和:开头的所有连续部分。

在替换中,使用第1组来保持第一次出现。

代码语言:javascript
复制
^((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开头的行

  • )*关闭非捕获组并可选择地重复它

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73099547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档