簡體   English   中英

正則表達式匹配 - Python - 任意數量的字符

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

但是,我也想在發出多個時捕獲它:

  • 2019-AWP-659 通 662-NRA
  • 2019-AWP-3823/3825-NRA
  • 2019-AWP-4593/4594/4595/4596-NRA
  • 2019-ASW-4791、4794 通 4796、4798 通 4800-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 或您正在處理的任何內容。

要匹配任何文本,您還可以使用.* ,它將匹配到行尾,然后回溯以匹配-的最后一次出現,然后匹配OENRA

您可以通過向字符 class (如A[AG]L添加一些字符來縮短交替時間,以匹配AALAGL

請注意,您不需要(?:\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.

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