regex没有返回2个单独的匹配项

lfapxunr  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(200)

尝试将两个句子作为单独的组来捕获。正则表达式目前只捕获第一个句子。
字符串=

  • Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右/右前轮胎缺少有棱垫圈。在福特检查期间,维修人员发现有棱垫圈丢失,并更换了右/右发动机支座。*

正则表达式=

(?:^|\.|;)([^.]*missing.*?)(?:\.|$)

当前仅返回以下内容:
Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右前轮轮胎缺失唐垫圈。
所需输出:
第一场:
Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右前轮轮胎缺失唐垫圈。
第二场:
在福特的一次检查中,维修人员发现舌垫圈丢失,并更换了R/H发动机支座。
我在这里使用regex测试器来测试:https://regex101.com/

cczfrluj

cczfrluj1#

您可以使用lookbehindAssert来代替匹配,以便在第一个匹配中不使用字符串末尾的最后一个点,而您也希望在第二个字符串的开头进行匹配。

(?:(?<=[;.])|(?<=^))[^.]*missing[^.]*(?:\.|$)

模式匹配:

  • (?:(?<=[;.])|(?<=^))声明;.或字符串的开头
  • [^.]*missing[^.]*匹配点以外的可选字符之间的missing
  • (?:\.|$)匹配.或Assert字符串结尾

Regex demo
请注意,在@sln的注解中有一种更短的方式来编写交替,只需使用^而不是(?<=^)作为锚也不匹配字符。

相关问题