Python正则匹配所有首字母为字母的单词仅返回R的原因及解决方法
问题成因
- 正则开头的
^锚点默认仅匹配整个字符串的起始位置,不会识别每个单词的开头,所以只会返回整个字符串第一个符合规则的字符R。 - 你当前写的正则仅匹配单个
\w字符,就算去掉^也只能拿到所有单词的首字母,无法返回完整单词。 - 额外说明:
\w除了英文字母外,还会匹配数字、下划线,如果你的需求是严格限定首字母为英文字母,直接用\w会匹配到首字符是数字、下划线的单词,不符合预期。
解决方案
如果要匹配所有首字符为英文字母的完整单词,把正则调整为r'\b[a-zA-Z]\w*'即可,各部分规则说明:
\b是单词边界锚点,匹配每个单词的起始位置[a-zA-Z]限定首字符为任意英文字母\w*匹配首字母后面0个或多个单词字符,覆盖完整单词的后续内容
修改后的代码如下:
import re random_regex = re.compile(r'\b[a-zA-Z]\w*') x = random_regex.findall('RoboCop eats baby food. BABY FOOD.') print(x)
运行后输出结果为:['RoboCop', 'eats', 'baby', 'food', 'BABY', 'FOOD'],符合需求。
内容的提问来源于stack exchange,提问作者Logic
相关产品推荐
相关产品推荐

