python正则表达式匹配数字后跟字符串或什么也没有

时间:2016-11-17 21:08:44

标签: python regex

如何匹配紧跟在/ tcp或/ udp之后的数字或者什么都没有?

以下说明了3种情况:输入 - >结果

  1. 123 / tcp_haha - > 123
  2. 123 - > 123
  3. 123abc / tcp - >没有比赛
  4. 我使用re.compile(r'(\d+)(?:\/[tcpud]{3})*'),但在案例3中也匹配。

    编辑: 猜猜这真的是一个后续问题:如何匹配数字,然后是/ tcp或/ udp,或者是tcp /或/ udp,还是单独进行? 所以

     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 个答案:

答案 0 :(得分:4)

字符类将匹配其包含字符的任何组合。您需要使用逻辑OR。

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

?:是非捕获组表示法,?将使您的非捕获组可选(对于非后缀情况)。

如果要捕获字符串,如果有/tcp后面的内容你可以使用以下正则表达式:

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

演示:here

答案 1 :(得分:1)

原始问题如何:

^\d+(?=/tcp|/udp|$)

答案 2 :(得分:0)

编辑后使用this regex

\d+(?=\/tcp|\/udp)
  • \d+匹配一个或多个数字
  • (?=...)是预测,如果下一个字符是......,匹配将停止。
  • \/tcp|\/udp匹配斜杠后跟tcpudp