首頁 > 軟體

Python語法學習之正規表示式的使用詳解

2022-04-16 13:00:59

要想成功的進行字串的匹配需要使用到正規表示式模組,正規表示式匹配規則以及需要被匹配的字串。在這三個條件中,模組與字串都是準備好的,只有匹配規則異常的靈活,而今天這個章節就是認識一下正規表示式中的特殊字元,通過這些字元就可以針對我們想要的資料進行匹配。

正規表示式中的特殊字元

特殊字元描述
d匹配任何十進位制的數位,與[0-9]一致
D匹配任意非數位
w匹配任何字母數位下劃線及unicode字元集
W匹配非字母數位的資料以及下劃線
s匹配任何空格字元,與 [n t r v f] 相同
S匹配任意非空字元
A匹配字串的起始
Z匹配字串的結束
.匹配任何字元(除了 n 之外);也叫做萬用字元

正規表示式的使用

接下來看一個小案例,幫助我們瞭解這些 特殊字元的使用方法 。

import re

test_data = "My name is Neo, I'm 30 years old."		# 將一串字串賦值給變數 test_data
result_int = re.findall('d', test_data)	# 使用 findall 函數並傳入 'd' 的匹配規則匹配 test_data(只匹配數位)
result_Space = re.findall('s', test_data)	# 使用 findall 函數並傳入 'd' 的匹配規則匹配 test_data(只匹配空格)
result_str = re.findall('w', test_data)	# 使用 findall 函數並傳入 'd' 的匹配規則匹配 test_data(匹配字串)
result_str_start = re.findall('AMy', test_data)			# 匹配開頭為 My 的字串
result_str_start_null = re.findall('AMya', test_data)		# 匹配開頭為 Mya 的字串(不存在 mya ,返回空列表)
result_str_end = re.findall('old.Z', test_data)			# 匹配結尾為 old. 的字串
result_str_end_null = re.findall('zold.Z', test_data)		# 匹配結尾為 zold. 的字串(不存在 zold ,返回空列表)
result_all = re.findall('.', test_data)		# 匹配除了 n 之外的所有字元(包含空格)

print(result_int)
print(result_Space)
print(result_str)		# 從結果上來看 w 要比 d 更高階一些,不僅匹配了 str,也匹配了 int(實際上這裡的int依然是字串)
print(result_str_start)
print(result_str_start_null)
print(result_str_end)
print(result_str_end_null)

# >>> 執行結果如下
# >>> ['3', '0']
# >>> [' ', ' ', ' ', ' ', ' ', ' ', ' ']
# >>> ['M', 'y', 'n', 'a', 'm', 'e', 'i', 's', 'N', 'e', 'o', 'I', 'm', '3', '0', 'y', 'e', 'a', 'r', 's', 'o', 'l', 'd']
# >>> ['My']
# >>> []
# >>> ['old.']
# >>> []
# >>> ['M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'N', 'e', 'o', ',', ' ', 'I', "'", 'm', ' ', '3', '0', ' ', 'y', 'e', 'a', 'r', 's', ' ', 'o', 'l', 'd', '.']

正則小案例 - 1

1、定義一個函數,判斷傳入引數是否包含有數位。

2、定義一個函數,判斷傳入引數是否含有數位,如果有則移除。

import re


def have_number(data):      # 定義一個判斷是否存在數位的函數
    result = re.findall('d', data)     # 利用 re 模組的 findall 函數的 d 規則判斷傳入的 data 是否存在數位
    print(result)
    for i in result:        # 利用 for 迴圈 判斷 result 的結果,如果存在返回 True ;反之返回 False
        return True
    return False

def remove_number(data):
    result = re.findall('D', data)
    print(result)
    return ' '.join(result)


if __name__ == '__main__':
    test_data_1 = "My name is Neo, I'm 30 year's old."
    test_data_2 = "it's a beautiful day to be with you"
    result = have_number(test_data_1)
    print(result)
    result = remove_number(test_data_1)
    print(result)
    result = re.findall('W', test_data_2)      # 匹配非字母數位的資料以及下劃線
    print(result)

執行結果如下圖:

正則小案例 - 2

1、定義一個 startwith 函數 判斷傳入資料是否是字串的開頭

2、定義一個 endwith 函數 判斷傳入資料是否是字串的結尾

import re


def startswith(sub, data):
    _sub = 'A{}'.format(sub)
    result = re.findall(_sub, data)

    for i in result:
        return True
    return False

def endswith(sub, data):
    _sub = '{}Z'.format(sub)
    result = re.findall(_sub, data)

    if len(result) == 0:
        return False
    else:
        return True
    
    
if __name__ == '__main__':
    result = startswith('My', test_data_1)
    print(result)
    result = endswith('old.', test_data_2)
    print(result)

執行結果如下:

正則小案例 - 3

1、python 內建函數 len() 是可以獲取到字串的長度的,但是當字串中存在著空格符號的時候也會計算在長度內。

2、利用正則的知識,定義一個計算字串真實長度的函數

import re


def real_len(data):
    result = re.findall('S', data)
    return len(result)


if __name__ == '__main__':
    test_data_1 = "My name is Neo, I'm 30 year's old."
    test_data_2 = "it's a beautiful day to be with you"

    print(len(test_data_2))
    result = real_len(test_data_2)
    print(result)

執行結果如下:

以上就是Python語法學習之正規表示式的使用詳解的詳細內容,更多關於Python正規表示式的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com