Python-如何使用 re 匹配整个字符串 [重复]
Posted
技术标签:
【中文标题】Python-如何使用 re 匹配整个字符串 [重复]【英文标题】:Python- how do I use re to match a whole string [duplicate] 【发布时间】:2013-04-03 23:52:03 【问题描述】:我正在验证用户输入的文本,以便它只接受字母而不接受数字。到目前为止,当我输入一个数字(例如 56)时,我的代码工作正常,它警告我我应该只输入字母,当我输入字母时它不会返回任何东西(就像它应该做的那样)。我的问题是,当我开始输入字母后跟数字时它会接受它,例如(s45)。它的作用是接受第一个字母,但不接受整个字符串。我需要它来接受整个字符串。
def letterCheck(aString):
if len(aString) > 0:
if re.match("[a-zA-Z]", aString) != None:
return ""
return "Enter letters only"
【问题讨论】:
你已经返回空,并尝试将+
添加到正则表达式的末尾。
不,退货部分没问题。如果它通过了验证测试,它意味着什么都不返回。
你为什么不只使用aString.isalpha()
?
这不是问题,但这是一个相当糟糕的 IMO 设计;如有必要,返回一个布尔值并在调用代码中打印错误消息...
问题标题具有误导性,解决方案解决了所描述的问题,而不是如何匹配整个字符串。
【参考方案1】:
在您的正则表达式 + 原始字符串中使用边界来编码正则表达式,如下所示:
r"^[a-zA-Z]+$"
【讨论】:
【参考方案2】:将其锚定到开头和结尾,并匹配一个或多个字符:
if re.match("^[a-zA-Z]+$", aString):
这里^
定位到字符串的开头,$
定位到结尾,+
确保匹配 1 个或多个字符。
不过,您最好使用str.isalpha()
。无需在这里使用沉重的正则表达式锤子:
>>> 'foobar'.isalpha()
True
>>> 'foobar42'.isalpha()
False
>>> ''.isalpha()
False
【讨论】:
你需要这个:^
和 re.match 吗?不是暗示吗?
@buffer:是的,这是暗示的;但是我更喜欢显式锚点,因为您绝对需要$
,而且太多人会因为re.search()
和re.match()
之间的差异而绊倒。
@MartijnPieters :这是一个很好的建议。我无法从文档中推断出将^
与re.match
放在一起是否有任何副作用【参考方案3】:
您可以考虑在字符串上使用 isalpha()。如果字符串只包含字母字符,则返回 true,否则返回 false。
if aString.isalpha():
do something
else:
handle input error
【讨论】:
isalpha()
对于这个应用程序的一个很好的属性是它为空字符串返回False
,因此不再需要单独的测试。
感谢大家的快速解答,他们都帮助我解决了这个问题。【参考方案4】:
如果您要寻找漂亮的 Python 式著作,请选择 isalpha 和 isdecimal :
str = u"23443434";
print str.isdecimal();
【讨论】:
以上是关于Python-如何使用 re 匹配整个字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章