【问题标题】:Regex match strings only after certain character正则表达式仅在特定字符后匹配字符串
【发布时间】:2021-11-22 06:43:42
【问题描述】:

我想删除所有数字,但仅限于|之后

blah, 1. retain 3. dont alter..blah | blah 1. remove balh.. 19. altered

应用正则表达式后,字符串应该是

blah, 1. retain 3. dont alter..blah | blah remove balh..  altered

当我替换使用这个正则表达式 [0-9]+\. 它甚至在 | 之前匹配所有“带点的数字”,而当我使用正则表达式 | [0-9]+\. 它只选择第一个数字和点,即1.,在 | 之后

【问题讨论】:

  • 只需将以下正则表达式的匹配项转换为空字符串:\d+\.(?!.*\|)Demo(?!.*\|) 是一个否定的前瞻,断言匹配不能在字符串后面跟一个管道字符。
  • @CarySwoveland 谢谢,它成功了!好主意!如果您愿意,请将其作为答案发布,以便我可以接受它并且其他人可以从中受益,非常感谢您的帮助:)

标签: regex sublimetext


【解决方案1】:

您可以使用否定前瞻和使用negated character class 排除换行符或| 来断言右侧不是管道字符:

\d+\.(?![^\r\n|]*\|)

说明

  • \d+\. 匹配 1+ 个数字和一个点
  • (?! 负前瞻,断言不向右
    • [^\r\n|]*\| 匹配除换行符或 | 以外的可选字符
  • ) 关闭前瞻

查看regex demo


另一种选择是使用积极的前瞻来断言直到字符串末尾不是右侧的管道字符:

\d+\.(?=[^\r\n|]*$)

说明

  • \d+\. 匹配 1+ 个数字和一个点
  • (?= 正向前瞻,向右断言
    • [^\r\n|]*$ 匹配除换行符或 | 以外的可选字符,直到字符串结尾 $
  • ) 关闭前瞻

查看regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2017-10-02
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多