[英]Python Regex to Check Long List of Strings Match a Pattern
我想測試一個字符串:
BASE [AZ] +單字符{F,G,H,J,K,M,N,Q,U,V,X,Z} +單數值[0-9]
“ BASE”的長度至少為一個字符。
例如。 'ESZ6'-> True,'ESSP6'-> False
我能做到:
import re
prog = re.compile('[A-Z]+[FGHJKMNQUVXZ]{1}[\d]{1}')
...
if prog.search(string):
print('This matched...')
然后,我想使用:
matches = [i for i in items if prog.search(item)]
這是實現此目標的最佳方法嗎?
這取決於“測試字符串”的含義。 您是否要檢查整個字符串是否與您的模式匹配,或者該模式是否恰好出現在您的字符串中,例如“ ESZ6”與“我的ESZ6在口袋里燒了一個洞”。其他字符可以鄰接嗎?您的目標,例如“ 123ESZ6ARE”?
假設我們只是測試單個令牌,例如“ ESZ6”和“ ESSP6”,那么這里有一些代碼提示:
import re
items = ('ESZ6', 'ESSP6')
prog = re.compile(r"[A-Z]+[FGHJKMNQUVXZ]\d$")
matches = [item for item in items if prog.match(item)]
除非要進行無錨定搜索,否則請使用.match()而不是.search()。 如果您不希望結尾結尾,請刪除最后的'$'。 (如果使用Python 3.4或更高版本,並且希望進行錨定搜索,則可以刪除'$'並使用.fullmatch而不是.match)
模式匹配運算符僅匹配一個字符,無重復運算符,因此您不需要{1}指示。 處理模式時,請使用原始字符串r“ \\ d”,以防止Python弄亂您的反斜線。
您的描述和示例不完全匹配,因此我在這里進行一些假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.