Python中的复杂正则表达式

时间:2015-06-04 11:16:04

标签: python regex

我正在尝试使用正则表达式编写通用模式,以便它只从字符串中获取特定内容。假设我们有像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)

我无法理解如何编写正则表达式。也可以以列表的形式获取值。我写了更多的模式,但没有帮助。

3 个答案:

答案 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))