在 Python 中檢查字串是否包含數字
本教程將介紹在 Python 中檢查一個字串是否包含一個數字的不同方法。
Python 中使用 any()
和 isdigit()
函式來檢查字串是否包含數字
內建函式 any()
接受一個迭代物件,並將其作為布林值讀取。如果在可迭代物件中至少有一個元素被識別為 True
,函式將返回 True
,如果沒有一個 True
值則返回 False
。
我們可以將 any()
函式與內建的字串方法 isdigit()
結合起來,該方法檢查一個字串是否在其大小範圍內包含任何數字字元,如果一個字串包含 Python 中的數字,則返回 True
。
例如,讓我們宣告兩個字串變數,一個有數字,一個沒有。之後,宣告一個函式來檢查字串是否包含一個數字。
string1 = "String Number One"
string2 = "String Number 2"
def hasNumber(stringVal):
return any(elem.isdigit() for elem in stringVal)
print(string1, "has number:", hasNumber(string1))
print(string2, "has number:", hasNumber(string2))
為了進一步縮短程式碼,我們可以宣告一個包含同樣兩個函式的 lambda 函式來檢查字串。
string1 = "String Number One"
string2 = "String Number 2"
hasNumber = lambda stringVal: any(elem.isdigit() for elem in stringVal)
print(string1, "has number:", hasNumber(string1))
print(string2, "has number:", hasNumber(string2))
輸出:
String Number One has number: False
String Number 2 has number: True
在 Python 中使用 re.search()
檢查字串是否包含一個數字
Python 支援使用模組 re
對正規表示式進行操作。我們可以使用函式 re.search()
來檢查一個給定的字串中是否包含一個數字。
re.search()
接受兩個主要引數,第一個是正規表示式,第二個是要檢查的字串是否匹配表示式。
用於匹配任何數字的表示式是\d
或 [0-9]
。在這個例子中,我們將使用\d
作為 search()
的第一個引數。
import re
string1 = "Number One Two Three"
string2 = "Number 123"
def hasNumber(stringVal):
if (re.search('\d', stringVal) == None):
return False
else:
return True
print(string1, "contains number:", hasNumber(string1))
print(string2, "contains number:", hasNumber(string2))
使用 lambda 宣告和三元運算子可以將函式縮短為一行,就像這樣。
hasNumber = lambda stringVal: False if re.search('\d', stringVal) == None else True
輸出:
Number One Two Three contains number: False
Number 123 contains number: True
就執行時間而言,正規表示式評估比使用內建的字串函式要快得多。如果字串的值相當大,那麼 re.search()
比使用字串函式更理想。
在給定字串上執行 search()
函式之前,使用 re.compile()
編譯表示式,也會使執行時間更快。
將 compile()
的返回值捕獲到一個變數中,然後在這個變數中呼叫 search()
函式。在這種情況下,search()
只需要一個引數,即對照編譯後的表示式搜尋的字串。
def hasNumber(stringVal):
re_numbers = re.compile('\d')
return False if (re_numbers.search(stringVal) == None) else True
綜上所述,內建函式 any()
和 isdigit()
可以很容易地串聯使用,檢查一個字串是否包含一個數字。
然而,在正規表示式模組 re
中使用實用函式 search()
和 compile()
會比內建的字串函式更快地生成結果。所以,如果你要處理大的數值或字串,那麼正規表示式的解決方案要比字串函式更理想。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn