正则表达式如何精准匹配指定起始标识到第二个逗号间的内容
问题说明
待处理示例字符串:
Я, Вагапова Варвара Сергеевна, 29.10.1990 года
提取目标:Я, 与第二个逗号之间的内容,预期结果为 Вагапова Варвара Сергеевна。
初始使用的正则:
(?<=Я, )(.*)(?=,)
实际匹配时捕获了超出预期范围的内容,不符合要求。
出错原因
正则里的.*默认是贪婪匹配逻辑,会尽可能向后匹配最长的符合条件的内容,直到找到字符串里位置最靠后的逗号才终止匹配,因此不会在第二个逗号的位置停下,导致多捕获了内容。
修正方案
- 方案1:把贪婪匹配改成非贪婪匹配,在
.*后追加?,让匹配逻辑遇到第一个符合要求的逗号就停止,修正后正则:(?<=Я, )(.*?)(?=,) - 方案2:直接限定捕获内容不能包含逗号,匹配所有非逗号字符,这种写法性能更好,边界兼容性更强,修正后正则:
(?<=Я, )([^,]*)(?=,)
两种正则都可以准确拿到目标结果Вагапова Варвара Сергеевна。
内容的提问来源于stack exchange,提问作者Alex Nikitin
相关产品推荐
相关产品推荐

