Python正则\pL匹配问题:含重音拉丁字符的关键词匹配异常
解决方案
问题根因
原正则错误使用负向先行断言匹配关键词前的边界,正确逻辑应该用负向后行断言判断关键词前不存在拉丁字符。
修正后的代码
import regex as re # 修正逻辑:关键词前用负向后行断言判断无拉丁字符,关键词后用负向先行断言判断无拉丁字符 p = r'(?<!\pL)blah(?!\pL)' # 原有测试用例 print(re.search(p, "blah u")) print(re.search(p, "blahé u")) print(re.search(p, "éblah u")) print(re.search(p, "blahaha")) # 新增测试用例 print(re.search(p, "u blah"))
输出结果
<regex.Match object; span=(0, 4), match='blah'> None None None <regex.Match object; span=(2, 6), match='blah'>
关于内置re模块的说明
Python标准库的re模块仅在3.11及以上版本才支持\p{}格式的Unicode属性转义语法,你使用的3.8版本不支持该特性,继续使用第三方regex库是最优方案。
内容的提问来源于stack exchange,提问作者Alex R.
相关产品推荐
相关产品推荐

