Python中的正则表达式不工作

0 投票
3 回答
1095 浏览
提问于 2025-04-18 13:49

为什么这个在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')

因为现在这样的话,如果有匹配,捕获组只会包含最后一个字母。

撰写回答