我有一个像'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)
m
是None
//
答案 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