3

私は次のような文字列を持っています'testname=ns,mem=2G'

上記の文字列を解析した後、変数と変数tstnmを割り当てたいnsmemory2G

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

これは、ルックアラウンド アサーションを使用しているためです。それらは位置のみに一致し、グループ内の文字列には一致しません。したがって、常に false\,(?<=mem=)(\w+)であるため、true になることのない正規表現を作成しています。\,(?<=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 に答える