Python正则如何匹配含重音字符、'del'的指定开头字符串
正则匹配问题修复方案
需求背景
需要匹配以下三个固定前缀的字符串:
"Facultad Regional Villa María" "Facultad Regional Mar del Plata" "Facultad Regional Haedo"
现有正则规则如下,强制要求Facultad Regional必须位于字符串开头:
"^(Facultad Regional)( [A-Z][a-z]*){1,5}$"
当前正则仅能匹配第三个字符串,无法覆盖前两个,需要补充两类匹配规则:
- 字符串中出现小写单词
del时判定为有效匹配 - 单词中包含带重音标记的字母时判定为有效匹配
修正后的正则
针对西语场景的精简写法
"^(Facultad Regional)( (?:[A-ZÁÉÍÓÚÑ][a-záéíóúñ]*|del)){1,5}$"
通用多语言兼容写法(需开启Unicode匹配模式)
"^(Facultad Regional)( (?:\p{Lu}\p{Ll}*|del)){1,5}$"
调整逻辑说明
- 重音字符适配:原正则的
[A-Z][a-z]*仅支持无重音的基础英文字母,精简写法手动补充了西语常用的大写/小写重音元音、Ñ/ñ字符,可直接匹配María这类带重音的单词;通用写法用Unicode属性类\p{Lu}匹配所有语言的大写字母、\p{Ll}匹配所有语言的小写字母,不需要手动枚举变音字符,适配性更强。 del单词适配:用非捕获分组(?:常规单词规则|del)增加或逻辑,在保留原有首字母大写单词匹配规则的基础上,额外允许全小写的连接词del出现,不破坏原有的1-5个后缀单词的次数限制。
验证结果
三个目标字符串均可正常命中:
Facultad Regional Haedo:Haedo为常规首字母大写无重音单词,符合规则Facultad Regional Mar del Plata:Mar、Plata为常规大写开头单词,del为允许的小写连接词,符合规则Facultad Regional Villa María:María包含重音字母í,在扩展字符集覆盖范围内,符合规则
注意:使用通用Unicode写法时,需要在对应正则引擎中开启Unicode匹配标志,例如JavaScript环境添加
u标志,Python环境传入re.U参数,否则Unicode属性类无法正常生效。
内容的提问来源于stack exchange,提问作者Facundo Borrás
相关产品推荐
相关产品推荐

