正则表达式:匹配只包含一个字母的字符串

时间:2015-02-24 06:31:55

标签: python regex

如果有字符串

str =" S23#"

它应匹配并

如果str =" WS23%"

它不应该匹配(因为2个字符)

我使用re.search("^[{A-Z}?0-9()*%#+?=:._<>,!/\-]*$", str)并且它匹配两个字符串

2 个答案:

答案 0 :(得分:0)

只需删除与字符类中的所有大写字母匹配的模式,并将其置于两个[0-9()%#+?=:._<>,!/-]*模式之间。

re.match(r"^[0-9()%#+?=:._<>,!/-]*[A-Za-z][0-9()%#+?=:._<>,!/-]*$", st)

示例:

>>> s= "S23#"
>>> s1 = "WS23%"
>>> re.match(r"^[0-9()%#+?=:._<>,!/-]*[A-Za-z][0-9()%#+?=:._<>,!/-]*$", s)
<_sre.SRE_Match object; span=(0, 4), match='S23#'>
>>> re.match(r"^[0-9()%#+?=:._<>,!/-]*[A-Za-z][0-9()%#+?=:._<>,!/-]*$", s1)
>>> 

答案 1 :(得分:0)

^(?!(.*?[A-Z]){2})[{A-Z}?0-9()%#+?=:._<>,!/-]+$

试试这个。如果你想匹配整个字符串,也可以使用re.match。参见演示。

https://regex101.com/r/aI4rA5/2

re.match("^(?!(.*?[A-Z]){2})[{A-Z}?0-9()%#+?=:._<>,!/-]+$", str)