【问题标题】:regex to match pattern followed some string正则表达式匹配模式跟随一些字符串
【发布时间】:2018-04-17 18:32:48
【问题描述】:

我有以下文字。我想捕获模式ddd-dd-ddd,然后是所有文本,直到我再次点击ddd-dd-ddd。 我正在尝试使用这个正则表达式

\b[0-9]{3}-[0-9]{2}-[0-9]{3}\b.*

它匹配 982-99-122 后跟句子,直到遇到换行符。然后再次匹配第二个数字 586-33-453,然后是同一行上的文本。但它无法捕获下一行继续的文本。

或者如果我从这个字符串中删除换行符,它只会捕获第一个数字 982-99-122 并捕获整个字符串,即不匹配第二个数字 586-33-453

我应该如何解决这两个问题,1. 当换行符是字符串的一部分时,以及 2. 当字符串没有换行符时。

982-99-122 (FCC 333/22) lube oil service pump 1b discharge lube oil service pump  
aaa bb dsdsd  
586-33-453 Matches exactly 3 times 0-e single character in the range between 
dfldfldflkdf 545-66-666 sdkjsl () jdfkjd-kfdkf sdfl  
848-99-040 sdsd"" df  
dfdf  

【问题讨论】:

标签: regex


【解决方案1】:

看来你想要

\b([0-9]{3}-[0-9]{2}-[0-9]{3})\b([\s\S]*?)(?=\b[0-9]{3}-[0-9]{2}-[0-9]{3}\b|$)?

regex demo

详情

  • \b - 字边界
  • ([0-9]{3}-[0-9]{2}-[0-9]{3}) - 3 位、-、2 位、- 和 3 位
  • \b - 字边界
  • ([\s\S]*?) - 第 2 组:任何 0+ 个字符,尽可能少
  • (?=\b[0-9]{3}-[0-9]{2}-[0-9]{3}\b|$)? - 正向前瞻,需要 3 个数字、-、2 个数字、- 和 3 个数字作为整个单词或紧靠当前位置右侧的字符串结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多