簡體   English   中英

將 isalpha() 和 isspace() 合並為 1 個語句

[英]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) - xy
  • [^\\W\\d_] - 除數字或下划線外的任何單詞字符

來自Mark Tolonen關於如何匹配正則表達式中的所有 unicode 字母字符和空格回答

您可以使用以下解決方案:

s != '' and all(c.isalpha() or c.isspace() for c in s)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM