Pythonで単純な文字列を-として解析したい
Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)
異なる整数で7、45、0、0、1、23を抽出したいと思います。誰かがこれを抽出する方法を教えてもらえますか?
フォーラムには文字列解析の質問がたくさんありますが、自分に最適な答えを見つけることができません。
ありがとうございました。
Pythonで単純な文字列を-として解析したい
Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)
異なる整数で7、45、0、0、1、23を抽出したいと思います。誰かがこれを抽出する方法を教えてもらえますか?
フォーラムには文字列解析の質問がたくさんありますが、自分に最適な答えを見つけることができません。
ありがとうございました。
使用regex
:
In [71]: import re
In [72]: strs="Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)"
In [74]: [int(digit) for digit in re.findall(r'\d+',strs)]
Out[74]: [7, 45, 0, 0, 1, 23]
文字列内のすべての数字が必要な場合:
>>> import re
>>> s = 'Limits paramA : (7, 45) paramB : (0, 0) paramC : (1, 23)'
>>> [int(n) for n in re.findall(r'\d+', s)]
[7, 45, 0, 0, 1, 23]
括弧内の数字のみを検索する場合(この場合も同じ結果):
>>> [int(n) for m in re.findall(r'\(([\d, ]+)\)', s) for n in m.split(',')]
[7, 45, 0, 0, 1, 23]
この違いが重要になる可能性がある場所の例を次に示します。
>>> s = 'Limits param1 : (7, 45) param2 : (0, 0) param3 : (1, 23)'
>>> [int(n) for n in re.findall(r'\d+', s)]
[1, 7, 45, 2, 0, 0, 3, 1, 23]
>>> [int(n) for m in re.findall(r'\(([\d, ]+)\)', s) for n in m.split(',')]
[7, 45, 0, 0, 1, 23]
1
最初のメソッドは、 fromparam1
および2
fromなどにも一致することに注意してくださいparam2
。
>>> import re
>>> import ast
>>> nums = [num for tup in [ast.literal_eval(tup) for tup in re.findall('\([^)]*\)', s)] for num in tup]
[7, 45, 0, 0, 1, 23]
括弧内の数字のみを抽出します。