1. ホーム
  2. python

[解決済み] RegExで複数グループ?

2022-03-13 22:19:48

質問

Pythonで複数のグループを返すのに戸惑っています。私のRegExはこれです。

lun_q = 'Lun:\s*(\d+\s?)*'

そして、私の文字列は

s = '''Lun:                     0 1 2 3 295 296 297 298'''`

マッチしたオブジェクトを返して、グループを見たいのですが、最後の番号(258)しか表示されません。

r.groups()  
(u'298',)

のグループを返さないのはなぜですか? 0,1,2,3,4 などがあります。

解決方法は?

あなたの正規表現は1組の括弧(1つの捕捉グループ)しか含んでいないので、マッチには1つのグループしか含まれません。 捕捉グループに対して反復演算子を使うと ( + または * ) の場合、グループが繰り返されるたびに上書きされ、最後に一致したものだけが捕捉されます。

この例では、おそらく .split() 正規表現と組み合わせてください。

lun_q = 'Lun:\s*(\d+(?:\s+\d+)*)'
s = '''Lun: 0 1 2 3 295 296 297 298'''

r = re.search(lun_q, s)

if r:
    luns = r.group(1).split()

    # optionally, also convert luns from strings to integers
    luns = [int(lun) for lun in luns]