如果有字符串
str =" S23#"
它应匹配并
如果str =" WS23%"
它不应该匹配(因为2个字符)
我使用re.search("^[{A-Z}?0-9()*%#+?=:._<>,!/\-]*$", str)
并且它匹配两个字符串
答案 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)