我有一条消息
msg = 'untagged ethernet 1 ethernet 2 ethernet 3'
我想写一个正则表达式,它会找到'ethernet x'模式,这样如果我运行
m = re.match(str(regex),msg)
print m.groups()
它将保存变量x并显示类似
的内容(1,2,3)
我试过的表达是
regex = 'untagged ((?: ethernet (\S+))*)'
但我正在
('ethernet 1', 'ethernet 1', '1')\
结果
答案 0 :(得分:4)
您应该使用re.findall
代替re.match
:
>>> import re
>>> msg = 'untagged ethernet 1 ethernet 2 ethernet 3'
>>> re.findall("ethernet\s\d+", msg)
['ethernet 1', 'ethernet 2', 'ethernet 3']
>>> re.findall("ethernet\s(\d+)", msg) # Just the numbers
['1', '2', '3']
>>> tuple(map(int, re.findall("ethernet\s(\d+)", msg))) # What was in your post
(1, 2, 3)
>>>
re.findall
被明确设计用于查找字符串中所有出现的模式。