匹配字符串中的多个组

时间:2013-09-24 06:57:49

标签: python regex

我有一个像'testname=ns,mem=2G'

这样的字符串

解析我想要的上面的字符串 将变量tstnm分配给ns,将变量memory分配给2G

import re
str = "testname=ns,mem=2G"

b = re.search('(?<=testname=)\w+', str)
m = re.search('(?<=mem=)\w+', str)
if b:
     tstnm = b.group(0)
if m:
     memory = m.group(0)

哪个有效,但是当我尝试一次性完成时,比如 -

m = re.search('(?<=testname=)(\w+)\,(?<=mem=)(\w+)', str)

mNone //

3 个答案:

答案 0 :(得分:4)

使用re.findall(),您可以使用pipe(|)合并正则表达式:

>>> s = "testname=ns,mem=2G"
>>> re.findall('(?<=testname=)\w+|(?<=mem=)\w+', s)
['ns', '2G']

请勿使用str作为变量名称。

答案 1 :(得分:3)

那是因为您使用的是lookaround assertions。它们只匹配一个位置,但不匹配组内的字符串。因此,使用\,(?<=mem=)(\w+)创建一个永远不会成立的正则表达式,因为\,(?<=mem=)始终为false。

您可以改为使用capturing groups

import re
input = "testname=ns,mem=2G"

result = re.search('testname=(\w+),mem=(\w+)', input)
if result:
     tstnm = result.group(1)
     memory = result.group(2)

答案 2 :(得分:1)

你应该使用正则表达式吗?如何简单的字符串操作

inputString = "testname=ns,mem=2G"
result = inputString.split(",")
tstnm  = result[0].split("=")[1]
memory = result[1].split("=")[1]
print tstnm, memory

<强>输出

ns 2G