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 匹配整个字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python re模块常见函数

5-1

Python之re操作

正则表达式整理

python正则匹配

Python里面search和match的区别