2016-11-17 22 views
1

如何匹配一個數字後緊跟着是/ tcp還是/ udp或者什麼都不是?python正則表達式匹配號後面跟着字符串或者什麼都沒有

以下示出3分的情況:輸入 - >結果

  1. 123/tcp_haha - > 123
  2. 123 - > 123
  3. 123ABC/TCP - >不匹配

我用re.compile(r'(\d+)(?:\/[tcpud]{3})*')但在情況下,也匹配3.

編輯: 想這是真的是一個後續問題:如何匹配數字後面跟着/ tcp或/ udp,或者繼續使用tcp/or/udp,還是隻靠它本身? so

1. something else 123/tcp_haha --> 123 
2. 123 --> 123 
3. 123abc/tcp --> no match 
4. udp/123 something else --> 123 
5. tcp/123/tcp --> 123 

回答

3

字符類將匹配其包含字符的任意組合。您需要改爲使用邏輯OR。

r'^\d+(?:/tcp|/udp)?$' 

?:是一個非捕獲組符號和?會讓你的非捕獲組可選(非後綴的情況下)。

如果你想,如果事情跟着/tcp你可以用下面的正則表達式來捕捉字符串:

演示
r'^\d+(?:/tcp.*|/udp)?$' 

https://regex101.com/r/oUm0e9/1

+0

謝謝回覆!我剛剛更新了這篇文章,意識到我也想要捕獲該數字,即使後面跟着/ tcp。如何實現這一目標?再次感謝 – totoro

+0

@dragon_cat檢出編輯。 – Kasramvd

+0

嗨@kas再次感謝您的回覆。如果你能看一看,我添加了一個後續問題會很好。如果涉及太多,我會把它移到一個單獨的問題。 – totoro

0

使用this regex在您編輯後:

\d+(?=\/tcp|\/udp) 
  • \d+匹配一個或多個數字
  • (?=...)是向前看,如果下次字符匹配將會停止...
  • \/tcp|\/udp一個斜線跟着tcpudp
+0

感謝您的回覆!它工作除了不能匹配所有數字(情況2) – totoro

1

匹配這個怎麼樣你原來的問題:

^\d+(?=/tcp|/udp|$) 
相關問題