簡體   English   中英

Python正則表達式檢查長字符串匹配模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM