在 Python 中檢查字串是否包含數字

Rayven Esplanada 2023年1月30日 2021年2月7日
  1. Python 中使用 any()isdigit() 函式來檢查字串是否包含數字
  2. 在 Python 中使用 re.search() 檢查字串是否包含一個數字
在 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() 會比內建的字串函式更快地生成結果。所以,如果你要處理大的數值或字串,那麼正規表示式的解決方案要比字串函式更理想。

Rayven Esplanada avatar Rayven Esplanada avatar

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

相關文章 - Python String