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

时间:2014-07-22 04:30:22

标签: python regex string variables

如果我有像

这样的字符串
ip nat pool-group pool1 pool2 pool3 vrid 0

pool-group是我想要检索并存储到字符串变量中的变量。

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

我想捕获池组和所有池

我想使用正则表达式执行此操作但无法使其正常工作

4 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西,

>>> 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']

OR

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

答案 1 :(得分:0)

您可以简单地按空格分割并从结果列表中获取所需的项目:

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']

答案 2 :(得分:0)

看起来你可能想要这样的东西:

>> 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

这将搜索'ip nat',然后搜索四组非空格,其间至少有一个空白字符。只要池变量永远不包含空格/制表符,这应该是通用的。

编辑:

>>> 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',)

答案 3 :(得分:0)

import re
x="ip nat pool-group pool1 pool2 pool3 vrid 0" 
pattern=re.compile(r"ip nat (.*?) vrid 0")
print pattern.findall(x)

这将为所有游泳池提供无论其数量如何。希望这有帮助。