2

正規表現(reモジュール)を使用して、Python 2.7の文字列から一部を抽出しようとしています。

私が得ることができる最高のものは

res = "{{PakBusPort_somename} 11942 pakbus-port 1}\r\n{{Somename} 5436 CR800-series 2}"
p = re.compile('PakBusPort_')
m = p.findall( res )

「PakBusPort_」が表示されます。しかし、「somename」部分を提供するためにも必要です。

基本的に、「PakBusPort_」で始まる { と } の間のすべてが必要です。私が試してみました

p = re.compile('PakBusPort_.*}}')

しかし、結果はありません。

私は正規表現の初心者なので、助けていただければ幸いです。

4

2 に答える 2

4
In [71]: p = re.compile(r'{PakBusPort_(.*?)}')

In [72]: p.findall(res)
Out[72]: ['somename']

も含める必要がある場合はPakBusPort_、左括弧を移動します。

In [73]: p = re.compile(r'{(PakBusPort_.*?)}')

In [74]: p.findall(res)
Out[74]: ['PakBusPort_somename']

疑問符は、一致を非貪欲}にするために必要です。つまり、最後の一致まですべてを一致させるのではなく、最初の一致で停止します。

于 2012-11-20T23:20:53.740 に答える
0

あなたは近かった、これはあなたの正規表現に一致するタプルのリストを返すはずです:

res = '{{PakBusPort_somename} 11942 pakbus-port 1}\r\n{{Somename} 5436 CR800-series 2}'
p = re.compile('{(PakBusPort)_([^}]*)}')
m = p.findall( res )
print m

[('PakBusPort', 'somename')]
于 2012-11-20T23:22:15.783 に答える