[英]Regex match - Python - any amount of characters
找不到看起來像我正在尋找的示例。
我正在嘗試在 FAA 航空航行通告中捕獲 ASN 編號。 下面的例子:
示例文本:
2019-AWP-7268-OE
正則表達式匹配(findall) :
\d{4}-(?:AAL|ACE|AEA|AGL|ANE|ANM|ASO|ASW|AWP|WTE|WTW)-(?:\d{3,6})-(?:OE|NRA)
但是,我也想在發出多個時捕獲它:
我試圖制作一個表達式,其中任何數量的字符但表達式以 OE/NRA 結尾。 有沒有辦法匹配年份(2019)、地區(ASW|AWP)、任何文本(3823/3825) ,然后是類型(OE|NRA)?
我會使用這樣的東西:
r'((\d{4})-(AAL|ACE|AEA|AGL|ANE|ANM|ASO|ASW|AWP|WTE|WTW)-([^-]+)-(OE|NRA))'
其中,當作為re.findall()
的鍵時,應該生成一個嵌套列表,其中外部列表包含每個大匹配項,內部列表包含每個匹配項中的四個子匹配項(作為元素 1、2、3 , 和 4 分別是元組;元素 0 是完整的單一模式匹配)。
此后,您可以對正則表達式操作或其他一些操作進行另一次迭代,特別是在匹配的任何文本部分,以准確隔離哪些 ID 或您正在處理的任何內容。
要匹配任何文本,您還可以使用.*
,它將匹配到行尾,然后回溯以匹配-
的最后一次出現,然后匹配OE
或NRA
您可以通過向字符 class (如A[AG]L
添加一些字符來縮短交替時間,以匹配AAL
或AGL
請注意,您不需要(?:\d{3,6})
周圍的非捕獲組
^(\d{4})-(ACE|AEA|A[AG]L|AN[EM]|AS[WO]|AWP|WT[EW])-(\d{3,6}.*)-(OE|NRA)$
如果沒有錨,您可以使量詞不貪婪並使用單詞邊界:
\b(\d{4})-(ACE|AEA|A[AG]L|AN[EM]|AS[WO]|AWP|WT[EW])-(\d{3,6}.*?)-(OE|NRA)\b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.