正则表达式从字符串检索变量字符串

2024-10-03 00:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一根绳子

ip nat pool-group pool1 pool2 pool3 vrid 0

pool group是我要检索并存储到字符串变量中的变量。你知道吗

pool1-pool3也是我想存储到数组列表中的变量,但是可以有任意数量的变量,并且不一定命名为pool*

我要捕获池组和所有池

我想用正则表达式来做这件事,但无法得到它的工作


Tags: 字符串ip列表数量group数组nat命名
3条回答

您只需按空格拆分,然后从结果列表中获取所需的项目:

line = "ip nat pool-group pool1 pool2 pool3 vrid 0"
arr = line.split(' ')
print arr # prints ['ip', 'nat', 'pool-group', 'pool1', 'pool2', 'pool3', 'vrid', '0']

如果你想使用正则表达式:

import re
line = "ip nat pool-group pool1 pool2 pool3 vrid 0"
arr = re.split('\s', line)
print arr # prints ['ip', 'nat', 'pool-group', 'pool1', 'pool2', 'pool3', 'vrid', '0']

# and you can also do the following:
print arr[3:6] # prints ['pool1', 'pool2', 'pool3']

看起来你可能想要:

>> import re
>>> m = re.search(r'ip nat (\S+)\s+(\S+)\s+(\S+)\s+(\S+) vrid 0', s)
>>> print m.groups()
('pool-group', 'pool1', 'pool2', 'pool3')
>>> print m.group(1)
pool-group

这将搜索“ipnat”,后跟四组非空白字符,中间至少有一个空白字符。只要池变量不包含空格/制表符,这应该是适当的泛型。你知道吗

编辑:

>>> s = 'ip nat pool-group pool1 pool2 pool3 vrid 0'
>>> t = 'ip nat pool-group pool1 pool2 pool3 pool6 pool7 vrid 0'
>>> m = re.search('^ip nat (.*) vrid 0', s)
>>> print m.groups()
('pool-group pool1 pool2 pool3',)
>>> n = re.search('^ip nat (.*) vrid 0', t)
>>> print n.groups()
('pool-group pool1 pool2 pool3 pool6 pool7',)

我想这就是你要找的

>>> s = "ip nat pool-group pool1 pool2 pool3 vrid 0"
>>> m = re.search(r'pool-\S+', s)
>>> f = m.group()
>>> f
'pool-group'
>>> lst = re.findall(r'pool\d+', s)
>>> lst
['pool1', 'pool2', 'pool3']

或者

>>> m = re.search(r'\w+-\w+', s)
>>> f = m.group()
>>> f
'pool-group'
>>> lst = re.findall(r'\w+\d+', s)
>>> lst
['pool1', 'pool2', 'pool3']

相关问题 更多 >