我有以下正则表达式:
re.findall(r'(\b[A-Za-z][a-z]{3,10}\b)', string_var)
我希望这个正则表达式返回的长度范围从3
到10
。但是,它会返回长度范围为4
到11
的单词的匹配项。
我们是否因此将上述正则表达式视为匹配以大写或小写字母开头的单词,后跟长度从3
到10
的字母?换句话说,将第一个字母作为扩展范围的额外字母?
感谢。
答案 0 :(得分:3)
是
你的正则表达式是
(\b[A-Za-z][a-z]{3,10}\b)
现在,分组不会影响比赛,所以我们可以忽略它们。并且\b
是"零宽度"匹配运算符 - 它匹配从一个字符类到另一个字符类的转换 - 因此它实际上并不对应于任何字符。我们可以忽略它们。这留下了:
[A-Za-z][a-z]{3,10}
这是两个字符类,第二个是重复说明符后缀:
[A-Za-z] - 匹配一个字符,大写或小写拉丁字母。
[a-z] {3,10} - 匹配至少3个,最多10个字符,小写字母a-z
所以总的来说,你匹配1 + [3,10]个字符。您的最小匹配将是4个字符,您的最大匹配将是11。