我正在尝试使用正则表达式编写通用模式,以便它只从字符串中获取特定内容。假设我们有像GigabitEthernet0 / 0/0/0或FastEthernet0 / 4或Ethernet0 / 0.222这样的字符串。正则表达式应该获取前2个字符和所有数字。因此,取决于上述情况,获取的结果应该类似于Gi0000或Fa04或Et00222。
x = 'GigabitEthernet0/0/0/2
m = re.search('([\w+]{2}?)[\\\.(\d+)]{0,}',x)
我无法理解如何编写正则表达式。也可以以列表的形式获取值。我写了更多的模式,但没有帮助。
答案 0 :(得分:5)
在正则表达式中,您可以使用re.findall
函数。
>>> import re
>>> s = 'GigabitEthernet0/0/0/0 '
>>> s[:2]+''.join(re.findall(r'\d', s))
'Gi0000'
OR
>>> ''.join(re.findall(r'^..|\d', s))
'Gi0000'
>>> ''.join(re.findall(r'^..|\d', 'Ethernet0/0.222'))
'Et00222'
OR
>>> s = 'GigabitEthernet0/0/0/0 '
>>> s[:2]+''.join([i for i in s if i.isdigit()])
'Gi0000'
答案 1 :(得分:0)
z="Ethernet0/0.222."
print z[:2]+"".join(re.findall(r"(\d+)(?=[\d\W]*$)",z))
你可以试试这个。这样可以确保只有来自最后的数字才能发挥作用。
答案 2 :(得分:0)
这是另一种选择:
s = 'Ethernet0/0.222'
"".join(re.findall('^\w{2}|[\d]+', s))