簡體   English   中英

正則表達式幫助匹配組

[英]Regex help to match groups

我正在嘗試編寫一個正則表達式來匹配具有多行的文本文件,例如:

* 964      0050.56aa.3480    dynamic   200        F    F  Veth1379
* 930      0025.b52a.dd7e    static    0          F    F  Veth1469

我的意圖是匹配“ 0050.56aa.3480”和“ Veth1379”,並將它們放在group(1)和group(2)中,以備后用。

我寫的正則表達式是:

\*\s*\d{1,}\s*(\d{1,}\.(?:[a-z][a-z]*[0-9]+[a-z0-9]*)\.\d{1,})\s*(?:[a-z][a-z]+)\s*\d{1,}\s*.\s*.\s*((?:[a-z][a-z]*[0-9]+[a-z0-9]*))

但是當我在http://www.pythonregex.com/上進行測試時,它似乎不起作用

有人可以指出我在這里所做的任何明顯錯誤。

謝謝,〜新手

嘗試這個:

^\* [0-9]{3} +([0-9]{4}.[0-9a-z]{4}.[0-9a-z]{4}).*(Veth[0-9]{4})$

正則表達式可視化

Debuggex演示

第一部分在捕獲組1中,捕獲組2中的“ Veth”代碼。


請考慮將“ 堆棧溢出正則表達式” FAQ標記為書簽,以備將來參考。 底部有一個在線測試人員列表。

我認為您不需要正則表達式:

for line in open('myfile','r').readlines():
    fields = line.split( )
    print "\n" + fields[1] + "\n" +fields[6]   

一個非常嚴格的版本看起來像這樣:

^\*\s+\d{3}\s+(\d{4}(?:\.[0-9a-f]{4}){2})\s+\w+\s+\d+\s+\w\s+\w\s+([0-9A-Za-z]+)$

正則表達式可視化

Debuggex演示

在這里我假設:

  • 列將幾乎相同,
  • 您的第一個匹配組包含一組十進制數字和兩組小寫十六進制數字,
  • 最后一個字可以是任何東西。

一些注意事項:

  • \\d+等效於\\d{1,}[0-9]{1,} ,但讀起來更好(imo)
  • 使用\\. 匹配文字. ,如. 只會匹配任何東西
  • [az]{2}[az][az]等效,但閱讀效果更好(我再次認為)
  • 但是,您可能想使用\\w代替一個單詞字符

這樣做:

reobj = re.compile(r"^.*?([\w]{4}\.[\w]{4}\.[\w]{4}).*?([\w]+)$", re.IGNORECASE | re.MULTILINE)
match = reobj.search(subject)
if match:
    group1 = match.group(1)
    group2 = match.group(2)
else:
    result = ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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