正则表达式 - 多个模式之间的字符串

时间:2017-07-31 19:21:53

标签: regex

我需要在多个可能的模式之间获得多个匹配

这是原始数据示例:

  

DC00-01-14 blabla blabla MB00-07-10 blublu CN03 bli BLI2454 bli bli CN02   bloblo bloblo bloblo SYSA bloublou bloublou bloublou CN06 blaiblai   blaiblai blaiblai METR blybly blybly blybly bagbly bagliblouBFD 454

并且正则表达式应该匹配:

  

DC00-01-14 blabla blabla
  MB00-07-10 blublu
  CN03 bli BLI2454 bli bli
  CN02 bloblo bloblo bloblo
  SYSA bloublou bloublou bloublou
  CN06 blaiblai blaiblai blaiblai
  METR blybly blybly blybly
  ppag blubliblouBFD 454

使用此表达式,我能够检测到键:

((DC\d{2}[-]\d{2}[-]\d{2})|(MB\d{2}[-]\d{2}[-]\d{2})|(CN0\d{1})|(SYSA)|(ppag)|(METR))

但是我需要在第一个键(没有第二个键)之间插入字符串,就像在我的结果示例中一样。

我该怎么办?

https://regex101.com/r/vyi864/1

1 个答案:

答案 0 :(得分:2)

我所做的是将你的正则表达式放在开始,所以它将匹配一次并使用类似于(?:(?!REGEXP)。)*的模式,它将匹配直到找到REGEXP但不包括正则表达式。把你的正则表达式用于代替REGEXP。

  

((DC \ d {2} [ - ] \ d {2} [ - ] \ d {2})|(MB \ d {2} [ - ] \ d {2} [ - ] \ d { ?!2})|(CN0 \ d {1})|(SYSA)|(ppag)|(METR))(((((DC \ d {2} [ - ] \ d {2} [ - ] \ d {2})|(MB \ d {2} [ - ] \ d {2} [ - ] \ d {2})|(CN0 \ d {1})|(SYSA)|(ppag)| (METR)))))*

忽略新线, 尝试这样的事情(?:\ s *(?!REGEXP)。)*而不是(?:(?!REGEXP)。)*。 如果存在,\ s *将匹配换行符。

(((DC | MB)\ d {2} [ - ] \ d {2} [ - ] \ d {2})|(CN0 \ d {1})|(SYSA)|(ppag)| (METR))(:?!\ S *(((((DC | MB)\ d {2} [ - ] \ d {2} [ - ] \ d {2})|(CN0 \ d {1 })|(SYSA)|(ppag)|。(METR)))))*

希望这会有所帮助。

您可以在右手中看到完全匹配是以所需方式进行的。 enter image description here