如何匹配紧跟在/ tcp或/ udp之后的数字或者什么都没有?
以下说明了3种情况:输入 - >结果
我使用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
答案 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
匹配斜杠后跟tcp
或udp