Python-如何使用re匹配整个字符串

Python- how do I use re to match a whole string

本问题已经有最佳答案,请猛点这里访问。

我正在验证用户输入的文本,以便它仅接受字母,而不接受数字。 到目前为止,当我输入数字时(例如56),我的代码可以正常工作,它警告我只能输入字母,而当我输入字母时它不返回任何内容(就像它应该那样)。 我的问题是,当我开始输入字母后跟数字时,它会接受它。 (s45)。 它的作用是接受第一个字母,但不接受整个字符串。 我需要它来接受整个字符串。

1
2
3
4
5
def letterCheck(aString):
    if len(aString) > 0:
        if re.match("[a-zA-Z]", aString) != None:
            return""
    return"Enter letters only"

  • 好了,您返回了空值,然后尝试在正则表达式的末尾添加+
  • 不,退货部分还可以。 如果通过验证测试,则不返回任何内容。
  • 为什么不只使用aString.isalpha()
  • 那不是问题,但是它是一个相当糟糕的设计IMO。 返回布尔值,并在必要时在调用代码中显示错误消息...
  • 问题标题具有误导性,解决方案解决了所描述的问题,而不是如何匹配整个字符串。


将其固定到开头和结尾,并匹配一个或多个字符:

1
if re.match("^[a-zA-Z]+$", aString):

在这里^锚定到字符串的开头,$锚定到字符串的结尾,并且+确保您匹配1个或多个字符。

不过最好还是使用str.isalpha()。 这里不需要拿起沉重的正则表达式锤子:

1
2
3
4
5
6
>>> 'foobar'.isalpha()
True
>>> 'foobar42'.isalpha()
False
>>> ''.isalpha()
False

  • 您是否需要此:^与re.match? 不是暗示吗?
  • @buffer:是的,暗含; 但是,我更喜欢显式锚,因为您绝对需要$,并且太多人绊倒了re.search()re.match()之间的区别。
  • @MartijnPieters:那是一个很好的建议。 我无法从文档中推断将^re.match放置是否有任何副作用


使用正则表达式+原始字符串中的边界对正则表达式进行编码,如下所示:

1
r"^[a-zA-Z]+$"


您可能会考虑在字符串上使用isalpha()。 如果字符串仅包含字母字符,则返回true,否则返回false。

1
2
3
4
if aString.isalpha():
   do something
else:
   handle input error

  • 此应用程序的isalpha()一个不错的属性是它为空字符串返回False,因此不再需要为此单独进行测试。
  • 感谢大家的迅速答复,它们都帮助我解决了这个问题。


如果您寻找漂亮的python文字,请使用isalpha和isdecimal:

1
2
str = u"23443434";
print str.isdecimal();