Python3 - 用Shell萬用字元匹配字串
問題
使用 Unix Shell 中常用的萬用字元(比如 .py , Dat[0-9].csv 等)去匹配文字字串
解決方案
fnmatch
模組提供了兩個函式—— fnmatch()
和 fnmatchcase()
,可以實現這樣的匹配。用法如下:
from fnmatch import fnmatch, fnmatchcase
print(fnmatch('foo.txt', '*.txt'))
print(fnmatch('foo.txt', '?oo.txt'))
print(fnmatch('Dat45.csv', 'Dat[0-9]*'))
True
True
True
names = ['Dat1.csv', 'Dat2.csv', 'config.ini', 'foo.py']
fn = [name for name in names if fnmatch(name, 'Dat*.csv')]
print(fn)
['Dat1.csv', 'Dat2.csv']
fnmatch()
函式使用底層作業系統的大小寫敏感規則進行匹配,不同的作業系統不一樣。比如:
# On OS X (Mac)
fnmatch('foo.txt', '*.TXT') # returen False
# On Windows
fnmatch('foo.txt', '*.TXT') # return True
如果對大小寫匹配的區別很在意,可以使用 fnmatchcase()
來代替,該函式完全按區別大小寫匹配。比如:
print(fnmatchcase('foo.txt', '*.TXT'))
False
討論
fnmatch()
函式匹配能力介於簡單的字串方法和強大的正規表示式之間。 如果在資料處理操作中只需要簡單的萬用字元就能完成的時候,這通常是一個比較合理的方案。
如果程式碼需要做檔名的匹配,最好使用 glob 模組。
相關文章
- OpenJudge 帶萬用字元的字串匹配字元字串匹配
- LeetCode 44 萬用字元匹配LeetCode字元
- 正則匹配指定字元之前的字串字元字串
- shell命令中的萬用字元字元
- LeetCode刷題記126-44. 萬用字元匹配LeetCode字元
- Excel 2010 SQL應用032 字元範圍的模糊匹配查詢ExcelSQL字元
- 字串匹配字串匹配
- Linux shell程式設計常用萬用字元有哪些?Linux程式設計字元
- 【字串匹配】KMP字串匹配KMP
- SQLServer用函式實現對字串按照特定字元進行拆分SQLServer函式字串字元
- python3 字串Python字串
- PHP獲取字串中的某個字元:採用陣列的方式PHP字串字元陣列
- python3怎樣匹配中文Python
- 20241108,LeetCode 每日一題,用 Go 計算字串中最長無重複字元LeetCode每日一題Go字串字元
- 隨機輸入3個字串,降序排列,用引用、字元陣列實現隨機字串字元陣列
- 字串-字元編碼字串字元
- Shell基礎教程七:Shell字串字串
- shell指令碼中列印所有匹配某些關鍵字元的行或前後各N行指令碼字元
- shell基礎應用
- 用python3統計一行字元中的英文字母,空格,數字和其他字元的個數Python字元
- 字串匹配模式問題字串匹配模式
- Bitset 亂搞字串匹配字串匹配
- shell正則匹配捕獲引用進行IP匹配
- python3: 字串和文字Python字串
- 字串-刪除指定字元字串字元
- 字串-字元統計2字串字元
- 字串-字元統計1字串字元
- 字串和字元的操作字串字元
- 字元陣列與字串字元陣列字串
- 用於管理應用程式得shell指令碼指令碼
- xampp 用 shell 匯入sqlSQL
- Shell指令碼應用(三)指令碼
- 字串——正規表示式匹配字串
- KMP字串模式匹配詳解KMP字串模式
- 【學習筆記】字串匹配筆記字串匹配
- 匹配空白字元正規表示式字元
- php正則匹配所有違規字元PHP字元
- Python實用技法第21篇:在字串的開頭和結尾處做文字匹配Python字串