正则表达式匹配模式后跟一些字符串

时间:2018-04-17 18:32:49

标签: regex

我有以下文字。我希望捕获模式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  

1 个答案:

答案 0 :(得分: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个diigts,-,2位数,-和3个数字作为整个单词或紧靠当前位置右侧的字符串结尾