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

Python 正则表达式:匹配只包含一个字母的字符串,python,regex,Python,Regex,如果有字符串 str=“S23#” 它应该匹配和 如果str=“WS23%” 它不应该匹配(因为有2个字符) 我使用了re.search(“^[{A-Z}?0-9()*%\+?=:.,!/\-]*$”,并且它匹配两个字符串只需从字符类中删除匹配所有大写字母的模式,并将其放在两个[0-9()%\+?=:.,!/-]*模式之间 re.match(r"^[0-9()%#+?=:._<>,!/-]*[A-Za-z][0-9()%#+?=:._<>,!/-]*$", st) re

如果有字符串

str=“S23#”

它应该匹配和

如果str=“WS23%”

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


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

只需从字符类中删除匹配所有大写字母的模式,并将其放在两个
[0-9()%\+?=:.,!/-]*
模式之间

re.match(r"^[0-9()%#+?=:._<>,!/-]*[A-Za-z][0-9()%#+?=:._<>,!/-]*$", st)
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)
>>> 
>>s=“S23#”
>>>s1=“WS23%”
>>>重新匹配(r“^[0-9()%#+?=:.#,!/-]*[A-Za-z][0-9()%#+?=:.#,!/-]*$”,s)
>>>重新匹配(r“^[0-9()%#+?=:.#,!/-]*[A-Za-z][0-9()%#+?=:.#,!/-]*$”,s1)
>>> 
^(?(![A-Z]){2}[{A-Z}?0-9()%#+?=:。#,!/-]+$
试试这个。如果你想匹配整个字符串,也可以使用
re.match
。参见演示

re.match(“^(?!(.[A-Z]){2})[{A-Z}?0-9()%#+?=:.#,!/-]+$”,str)

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