0

Python では、正規表現を使用して文字列から複数の入力を取得しようとしています。しかし、私は問題を抱えています。文字列の場合:

inputs       =    12 1  345 543 2

私は使用してみました:

match = re.match(r'\s*inputs\s*=(\s*\d+)+',string)

ただし、これは値のみを返します'2'。すべての値をキャプチャしようとしています'12','1','345','543','2'が、これを行う方法がわかりません。

どんな助けでも大歓迎です!

編集:これが機能しない理由を説明し、代替案を提供していただきありがとうございます。これが繰り返しの質問である場合は申し訳ありません。

4

4 に答える 4

2

次のようなものを試すことができます re.findall("\d+", your_string)

于 2013-05-28T14:32:37.147 に答える
1

正規表現を埋め込むことができます:

import re
s = 'inputs       =    12 1  345 543 2'
print re.findall(r'(\d+)', re.match(r'inputs\s*=\s*([\s\d]+)', s).group(1))
>>> 
['12', '1', '345', '543', '2']

または、レイヤーで実行します。

import re

def get_inputs(s, regex=r'inputs\s*=\s*([\s\d]+)'):
    match = re.match(regex, s)
    if not match:
        return False # or raise an exception - whatever you want
    else:
        return re.findall(r'(\d+)', match.group(1))

s = 'inputs       =    12 1  345 543 2'
print get_inputs(s)
>>> 
['12', '1', '345', '543', '2']
于 2013-05-28T14:48:07.453 に答える
1

単一の正規表現でこれを行うことはできません (.NET を使用していない限り)。これは、各キャプチャ グループが繰り返しても 1 つの結果しか返さないためです (Python の場合は最後の結果)。

可変長の後読みもできないため (その場合は可能(?<=inputs.*=.*)\d+)、これを 2 つのステップに分ける必要があります。

match = re.match(r'\s*inputs\s*=\s*(\d+(?:\s*\d+)+)', string)
integers = re.split(r'\s+',match.group(1))

したがって、整数のリスト全体 (およびそれらの間のスペース) をキャプチャし、そのキャプチャをスペースで分割します。

2 番目のステップは、以下を使用して実行することもできますfindall

integers = re.findall(r'\d+',match.group(1))

結果は同じです。

于 2013-05-28T14:35:18.743 に答える