Python中的正则表达式不工作
为什么这个在Python中不管用呢
x=re.match('/^([a-z]){3}$/','ssw')
我想检查长度为3且只包含小写字母的字符串。我是不是漏掉了什么?请给点建议。
3 个回答
0
在Python中,字符'^'和'$'是特殊字符,也叫元字符,所以:
x=re.match('^([a-z]){3}$','ssw')
x.group(0)
如果你想要匹配'^'和'$'这两个字符,你需要对它们进行转义,也就是加上一个反斜杠:
x=re.match('/\^([a-z]){3}\$/', '/^ssw$/')
x.group(0)
0
把 {3}
放在捕获组里,并去掉斜杠,
^([a-z]{3})$
你的代码应该是,
x=re.match(r'^([a-z]{3})$','ssw')
>>> x
<_sre.SRE_Match object at 0x7f13bfdf98a0>
>>> x.group()
'ssw'
这样做的话,只有当输入包含3个小写字母时,才会被捕获。
0
在Python中,你不需要使用分隔符...
x=re.match('^([a-z]){3}$','ssw')
另外,写正则表达式的时候,最好把字符串标记为原始字符串:
x=re.match(r'^([a-z]){3}$','ssw')
捕获组的用法有点不太对。如果你只是想测试是否匹配,可以把它们去掉:
x=re.match(r'^[a-z]{3}$','ssw')
如果你想捕获所有三个字母,把数量词放在里面:
x=re.match(r'^([a-z]{3})$','ssw')
因为现在这样的话,如果有匹配,捕获组只会包含最后一个字母。