3

我有一个字符串'testname=ns,mem=2G'

解析上面的字符串后,我想分配一个变量tstnmns变量memory2G

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

4

3 回答 3

4

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

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

不要str用作变量名。

于 2013-09-24T07:00:41.817 回答
3

那是因为您正在使用环视断言。它们只匹配一个位置,而不是组内的字符串。所以,\,(?<=mem=)(\w+)你正在创建一个永远不会是真的正则表达式,因为\,(?<=mem=)它总是假的。

您可以改用捕获组

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)
于 2013-09-24T07:06:58.167 回答
1

你应该为此使用正则表达式吗?简单的字符串操作怎么样

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

输出

ns 2G
于 2013-09-24T07:30:04.227 回答