在?Python?中使用通配符匹配字符串的方法
使用通配符匹配字符串:
- 使用
fnmatch.filter()方法從列表中獲取匹配模式的字符串。 - 使用
fnmatch.fnmatch()方法檢查字符串是否與模式匹配。
import fnmatch a_list = ['fql.txt', 'jiyik.txt', 'com.csv'] pattern = '*.txt' filtered_list = fnmatch.filter(a_list, pattern) print(filtered_list) # ??? ['fql.txt', 'jiyik.txt']

如果我們更愿意使用正則表達(dá)式,請(qǐng)向下滾動(dòng)到下一個(gè)副標(biāo)題。
fnmatch.filter方法接受一個(gè)可迭代對(duì)象和一個(gè)模式,并返回一個(gè)新列表,該列表僅包含與提供的模式匹配的可迭代對(duì)象元素。
示例中的模式以任意一個(gè)或多個(gè)字符開頭,以 .txt 結(jié)尾。
示例中的模式僅包含一個(gè)通配符,但您可以根據(jù)需要使用任意多個(gè)通配符。
請(qǐng)注意,星號(hào)
*匹配所有內(nèi)容(一個(gè)或多個(gè)字符)。
如果要匹配任何單個(gè)字符,請(qǐng)將星號(hào) * 替換為問號(hào) ?。
*匹配所有內(nèi)容(一個(gè)或多個(gè)字符)?匹配任何單個(gè)字符[sequence]匹配序列中的任意字符[!sequence]匹配任何不按順序的字符
下面是使用問號(hào)匹配任何單個(gè)字符的示例。
import fnmatch a_list = ['abc', 'abz', 'abxyz'] pattern = 'ab?' filtered_list = fnmatch.filter(a_list, pattern) print(filtered_list) # ??? ['abc', 'abz']
該模式匹配以 ab 開頭后跟任何單個(gè)字符的字符串。
如果要使用通配符檢查字符串是否與模式匹配,請(qǐng)使用 fnmatch.fnmatch() 方法。
import fnmatch
a_string = '2023_jiyik.txt'
pattern = '2023*.txt'
matches_pattern = fnmatch.fnmatch(a_string, pattern)
print(matches_pattern) # ??? True
if matches_pattern:
# ??? this runs
print('The string matches the pattern')
else:
print('The string does NOT match the pattern')該模式以 2023 開頭,后跟任意一個(gè)或多個(gè)字符,并以 .txt 結(jié)尾。
fnmatch.fnmatch方法接受一個(gè)字符串和一個(gè)模式作為參數(shù)。如果字符串與模式匹配,則該方法返回 True,否則返回 False。只需將星號(hào)*替換為問號(hào)?如果您想匹配任何單個(gè)字符而不是任何一個(gè)或多個(gè)字符。
或者,我們可以使用正則表達(dá)式。
使用正則表達(dá)式使用通配符匹配字符串
使用通配符匹配字符串:
使用 re.match() 方法檢查字符串是否匹配給定的模式。使用 .* 字符代替通配符。
import re
a_list = ['2023_fql.txt', '2023_jiyik.txt', '2023_com.csv']
regex = re.compile(r'2023_.*\.txt')
list_of_matches = [
item for item in a_list
if re.match(regex, item)
]
print(list_of_matches) # ??? ['2023_fql.txt', '2023_jiyik.txt']re.compile 方法將正則表達(dá)式模式編譯成一個(gè)對(duì)象,該對(duì)象可用于使用其 match() 或 search() 方法進(jìn)行匹配。
這比直接使用 re.match 或 re.search 更有效,因?yàn)樗4娌⒅赜昧苏齽t表達(dá)式對(duì)象。
正則表達(dá)式以 2023_ 開頭。
正則表達(dá)式中的
.*字符用作匹配任何一個(gè)或多個(gè)字符的通配符。
- 點(diǎn)
.匹配除換行符以外的任何字符。 - 星號(hào)
*與前面的正則表達(dá)式(點(diǎn).)匹配零次或多次。
我們使用反斜杠\字符來轉(zhuǎn)義點(diǎn)。 在擴(kuò)展名中,因?yàn)檎缥覀冎翱吹降?,點(diǎn)
.在正則表達(dá)式中使用時(shí)具有特殊含義。換句話說,我們使用反斜杠來處理點(diǎn)。 作為文字字符。
我們使用列表理解來迭代字符串列表。
列表推導(dǎo)用于對(duì)每個(gè)元素執(zhí)行某些操作或選擇滿足條件的元素子集。
在每次迭代中,我們使用 re.match() 方法檢查當(dāng)前字符串是否與模式匹配。
import re
a_list = ['2023_fql.txt', '2023_jiyik.txt', '2023_com.csv']
regex = re.compile(r'2023_.*\.txt')
list_of_matches = [
item for item in a_list
if re.match(regex, item)
]
print(list_of_matches) # ??? ['2023_fql.txt', '2023_jiyik.txt']如果提供的正則表達(dá)式在字符串中匹配,則 re.match 方法返回一個(gè)匹配對(duì)象。
如果字符串與正則表達(dá)式模式不匹配,則
match()方法返回 None。
新列表僅包含原始列表中與模式匹配的字符串。
如果只想匹配任何單個(gè)字符,請(qǐng)刪除點(diǎn)后面的星號(hào) *. 在正則表達(dá)式中。
import re
a_list = ['2023_a.txt', '2023_bcde.txt', '2023_z.txt']
regex = re.compile(r'2023_.\.txt')
list_of_matches = [
item for item in a_list
if re.match(regex, item)
]
print(list_of_matches) # ??? ['2023_a.txt', '2023_z.txt']點(diǎn) . 匹配除換行符以外的任何字符。
通過使用點(diǎn)
.在不轉(zhuǎn)義的情況下,正則表達(dá)式匹配任何以 2023_ 開頭,后跟任何單個(gè)字符并以 .txt 結(jié)尾的字符串。
如果大家在閱讀或編寫正則表達(dá)式時(shí)需要幫助,請(qǐng)參考我們的正則表達(dá)式教程。
該頁面包含所有特殊字符的列表以及許多有用的示例。
如果想使用正則表達(dá)式檢查字符串是否與模式匹配,我們可以直接使用 re.match() 方法。
import re
a_string = '2023_fql.txt'
matches_pattern = bool(re.match(r'2023_.*\.txt', a_string))
print(matches_pattern) # ??? True
if matches_pattern:
# ??? this runs
print('The string matches the pattern')
else:
print('The string does NOT match the pattern')如果字符串與模式匹配,則
re.match()方法將返回一個(gè)匹配對(duì)象,如果不匹配,則返回 None 。
我們使用 bool() 類將結(jié)果轉(zhuǎn)換為布爾值。
如果要對(duì)單個(gè)字符使用通配符,請(qǐng)刪除星號(hào) * 。
import re
a_string = '2023_ABC.txt'
matches_pattern = bool(re.match(r'2023_.\.txt', a_string))
print(matches_pattern) # ??? False
if matches_pattern:
print('The string matches the pattern')
else:
# ??? this runs
print('The string does NOT match the pattern')
請(qǐng)注意,點(diǎn).我們沒有使用反斜杠作為前綴用于匹配任何單個(gè)字符,而點(diǎn).我們以反斜杠 \ 為前綴的被視為文字點(diǎn)。
示例中的字符串與模式不匹配,因此 matches_pattern 變量存儲(chǔ)一個(gè) False 值。
到此這篇關(guān)于在 Python 中使用通配符匹配字符串的文章就介紹到這了,更多相關(guān)Python通配符匹配字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)分析pandas之布爾索引使用詳解
這篇文章主要為大家介紹了Python數(shù)據(jù)分析pandas之布爾索引使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Python實(shí)現(xiàn)的維尼吉亞密碼算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的維尼吉亞密碼算法,結(jié)合實(shí)例形式分析了基于Python實(shí)現(xiàn)維尼吉亞密碼算法的定義與使用相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
淺析Python中的絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入
這篇文章主要為大家詳細(xì)介紹了Python中的絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
Python?tkinter中四個(gè)常用按鈕的用法總結(jié)
python實(shí)現(xiàn)tree命令的使用示例

