[英]Combine isalpha() and isspace() into 1 statement
我正在寻找一个将方法isalpha()
和isspace()
成一个方法的函数。 我想检查给定的字符串是否只包含字母和/或空格,例如:
"This is text".isalpha_or_space()
# True
但是,使用这两种方法,我得到:
"This is text".isalpha() or "This is text".isspace()
# False
因为字符串不仅是 alpha 也不是空格。
当然,我可以遍历每个字符并检查它的空格或字母。
我还可以将字符串与("abcdefghijklmnopqrstuvwxyz" + " ")
然而,这两种方法对我来说似乎都不是很 Pythonic - 否则说服我。
最 Pythonic 的做法是为此使用def
:
def isalpha_or_space(self):
if self == "":
return False
for char in self:
if not (char.isalpha() or char.isspace()):
return False
return True
将其作为str
上的一个方法进行贡献并不容易,因为 Python 不鼓励对内置类型进行monkeypatching。 我的建议只是将其保留为模块级功能。
尽管如此,仍然可以模拟方法的接口,因为 Python 中的大多数名称空间如果您知道在哪里可以找到它们,那么它们都是可写的。 下面的建议不是 Pythonic,而是依赖于实现细节。
>>> import gc
>>> def monkeypatch(type_, func):
... gc.get_referents(type_.__dict__)[0][func.__name__] = func
...
>>> monkeypatch(str, isalpha_or_space)
>>> "hello world".isalpha_or_space()
True
使用正则表达式(regex) :
>>> import re
>>> result = re.match('[a-zA-Z\s]+$', "This is text")
>>> bool(result)
True
分解:
re
- Python 的正则表达式模块[a-zA-Z\\s]
- 任何字母或空格+
- 一项或多项前一项$
- 字符串结束以上适用于 ASCII 字母。 对于 Python 3 上的完整 Unicode 范围,不幸的是正则表达式有点复杂:
>>> result = re.match('([^\W\d_]|\s)+$', 'un café')
分解:
(x|y)
- x或y[^\\W\\d_]
- 除数字或下划线外的任何单词字符您可以使用以下解决方案:
s != '' and all(c.isalpha() or c.isspace() for c in s)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.