尝试将两个句子作为单独的组来捕获。正则表达式目前只捕获第一个句子。
字符串=
- Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右/右前轮胎缺少有棱垫圈。在福特检查期间,维修人员发现有棱垫圈丢失,并更换了右/右发动机支座。*
正则表达式=
(?:^|\.|;)([^.]*missing.*?)(?:\.|$)
当前仅返回以下内容:
Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右前轮轮胎缺失唐垫圈。
所需输出:
第一场:
Mazda 67车辆J8473在经销商维修人员更换车轮总成后,右前轮轮胎缺失唐垫圈。
第二场:
在福特的一次检查中,维修人员发现舌垫圈丢失,并更换了R/H发动机支座。
我在这里使用regex测试器来测试:https://regex101.com/
1条答案
按热度按时间cczfrluj1#
您可以使用lookbehindAssert来代替匹配,以便在第一个匹配中不使用字符串末尾的最后一个点,而您也希望在第二个字符串的开头进行匹配。
模式匹配:
(?:(?<=[;.])|(?<=^))
声明;
或.
或字符串的开头[^.]*missing[^.]*
匹配点以外的可选字符之间的missing
(?:\.|$)
匹配.
或Assert字符串结尾Regex demo
请注意,在@sln的注解中有一种更短的方式来编写交替,只需使用
^
而不是(?<=^)
作为锚也不匹配字符。