为何正则表达式r'\b\w+(?=\d)(?=[A-Z])'无法匹配Python3A?
正则表达式匹配失败原因解析
你的正则表达式r'\b\w+(?=\d)(?=[A-Z])'无法匹配Python3A的核心问题在于连续正向预查的位置要求:
- 正向预查
(?=\d)要求匹配到的单词末尾的下一个位置必须是数字; - 紧接着的
(?=[A-Z])要求同一个位置必须是大写字母。
但在Python3A中,Python末尾的下一个位置是字符3(数字),这个位置的字符是数字而非大写字母,两个预查条件无法同时满足,所以匹配失败。
你想要的逻辑是“单词后面紧跟数字和大写字母”,正确的写法应该是把两个条件合并成一个预查,检查单词后是否紧跟数字+大写字母的组合,比如:
r'\b\w+(?=\d[A-Z])'
这个正则会匹配Python,因为它后面的3A正好符合\d[A-Z]的规则,单个预查就能满足“后面紧跟数字和大写字母”的需求。
内容的提问来源于stack exchange,提问作者mon
相关产品推荐
相关产品推荐

