1

例として次の文字列を考えてみましょう。

str = '(Obsoletes RFC0011) (Updated by RFC0036, RFC0047) (Status: UNKNOWN)'

次のようなキーと値のペアを抽出したい:

matchobj['時代遅れ'] = 'RFC0011'

matchobj['更新者'] = ['RFC0036', 'RFC0047']

matchobj['ステータス'] = '不明'

どうすればいいですか?注: '(Obsoletes RFC0011)' のように、すべての括弧が必須というわけではありません。

私の考慮事項は次のとおりです。まず、文字列全体を括弧のペアで分割し、次に各括弧のペアから抽出します。これを達成するには、 for または while ステートメントを使用して括弧を一致させる必要がありますが、一致で複数のインスタンスを同じパターンで一致させる方法が Python にあるかどうかを知りたいです。つまり、一致結果にアクセスできます。リストまたは配列として

これを実装するためのより良い方法があるかもしれません。誰かが私にアドバイスをくれたら、私はPythonと正規表現の第一人者です? どうもありがとうございました!

4

2 に答える 2

2

パーツを取得(...)し、大文字の単語で分割して問題を解決できUpdated byます。

>>> s = '(Obsoletes RFC0011) (Updated by RFC0036, RFC0047) (Status: UNKNOWN)'
>>> data = [re.split(',?:?\s(?=[A-Z])',i) for i in re.findall(r'\((.*?)\)',s)]
>>> dic = {d[0]:d[1:] for d in data}
>>> dic
{'Status': ['UNKNOWN'],
 'Obsoletes': ['RFC0011'],
 'Updated by': ['RFC0036', 'RFC0047']}

必要に応じて、1 つの要素だけで引数を最適化できます。

Python が 2.7 より古い場合は、次を使用します。

dict((d[0],d[1:]) for d in data)
于 2012-07-08T03:43:07.573 に答える
0
from re import split

splitted = split(r'\)\s\(', "(Obsoletes RFC0011) (Updated by RFC0036, RFC0047) (Status: UNKNOWN)")

obsoletes, updatedby, unknown = [[j for j in split(r'[\s,]', i) if "RFC" in j] for i in splitted]


matchobj = {"Obsoletes" : obsoletes, "UpdatedBy" : updatedby, "Unknown" : unknown}

print matchobj 
于 2012-07-08T03:52:14.923 に答える