我需要在多个可能的模式之间获得多个匹配
这是原始数据示例:
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))
但是我需要在第一个键(没有第二个键)之间插入字符串,就像在我的结果示例中一样。
我该怎么办?
答案 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)))))*
希望这会有所帮助。