Python正则如何匹配字符串中指定位置为特定字符的单词?
正确正则写法及说明
问题排查
你当前的写法问题有两个:
- 所有位置都使用通用字母匹配规则,没有限定第3、5、6位为指定字符
- Python标准库
re不支持\p{L}语法,该语法需要第三方regex库才能生效
适配你的场景的正确代码
你已经将字符串转为全大写匹配,因此可以直接用简化正则:
import re res = re.findall(r'S[A-Z]{2}P[A-Z]HO[A-Z]', str_3.upper())
正则规则对应说明:
S:匹配第0位固定为S[A-Z]{2}:匹配第1、2位的任意大写字母P:匹配第3位固定为P(因为已经转全大写,不需要额外匹配小写p)[A-Z]:匹配第4位的任意大写字母HO:匹配第5、6位固定为H、O(转全大写后无需匹配小写)[A-Z]:匹配第7位的任意大写字母
不转全大写的兼容写法
如果不想提前处理字符串大小写,可以直接用兼容大小写的正则:
res = re.findall(r'S[a-zA-Z]{2}[Pp][a-zA-Z][Hh][Oo][a-zA-Z]', str_3)
如果需要避免匹配到更长字符串的中间片段,可以在正则前后加单词边界符\b:
# 全大写场景 res = re.findall(r'\bS[A-Z]{2}P[A-Z]HO[A-Z]\b', str_3.upper()) # 兼容大小写场景 res = re.findall(r'\bS[a-zA-Z]{2}[Pp][a-zA-Z][Hh][Oo][a-zA-Z]\b', str_3)
内容的提问来源于stack exchange,提问作者EdwinMald
相关产品推荐
相关产品推荐

