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字元
- 用trim去掉字串末尾的任意字元字串字元
- shell命令中的萬用字元字元
- Shell 程式設計 : 數值,字元,字串程式設計字元字串
- Linux Shell 萬用字元、元字元、轉義符使用Linux字元
- lintcode 萬用字元匹配 ac程式碼字元C程式
- 正規表示式如何匹配不包含指定字元的字串字元字串
- 字串匹配字串匹配
- HDU5716 : 帶可選字元的多字串匹配字元字串匹配
- [MYSQL-8]用萬用字元進行過濾MySql字元
- 用C#檢查字串中是否有Unicode字元C#字串Unicode字元
- 【字串匹配】KMP字串匹配KMP
- js實現的用指定字元每隔指定位數分割字串JS字元字串
- Linux shell程式設計常用萬用字元有哪些?Linux程式設計字元
- SQLServer用函式實現對字串按照特定字元進行拆分SQLServer函式字串字元
- 用正規表示式提取字串中的字元(包含數字)字串字元
- Shell字串字串
- Excel 2010 SQL應用032 字元範圍的模糊匹配查詢ExcelSQL字元
- Zsh 開發指南(四): 字串處理之萬用字元字串字元
- 字串匹配問題字串匹配
- LeetCode刷題記126-44. 萬用字元匹配LeetCode字元
- py匹配字串中間的字串字串
- shell 字元處理字元
- python3 字串Python字串
- PHP獲取字串中的某個字元:採用陣列的方式PHP字串字元陣列
- python3怎樣匹配中文Python
- 面試常遇到的萬用字元匹配的兩個小問題總結面試字元
- shell 字串操作字串
- 字串匹配模式問題字串匹配模式
- SQL Server字串左匹配SQLServer字串
- Bitset 亂搞字串匹配字串匹配
- 隨機輸入3個字串,降序排列,用引用、字元陣列實現隨機字串字元陣列
- shell正則匹配捕獲引用進行IP匹配
- 字串-字元編碼字串字元
- Swift:字元和字串Swift字元字串
- 字串拼接應用字串