2017-03-12 14 views
-4

Python 3: 文字列(方程式)が与えられた場合、正と負の整数のリストを返します。 私はさまざまな正規表現とリストの解読のソリューションを無駄にしようとしました。式4 + 3X又は-5 + 2Y又は-7y-2X 戻り考えるPython:文字列から正と負の整数をフィルタリングする

:[4,3]、[-5,2]、[-7、-2]

入力

str = '-7y-2x' 

出力

my_list = [-7, -2] 
+0

を逃れるために別のものを前に付けなければならない[MCVE]最新の試みのを提供し、あなたのコード何を参照して説明してくださいあなたが持っている問題。 – idjaw

+0

この質問がなぜ多くのdownvotesを得たか理解できません。はい、OPは彼の努力を示していませんが、少なくとも、彼は入力と期待される出力を示しており、仕事は非常に簡単です – RomanPerekhrest

答えて

3

シンプルなソリューション:

import re 

s = '-5+2y' 
result = [int(d) for d in re.findall(r'-?\d+', s)] 

print(result) 

出力:

[-5, 2] 

-?\d+

は - 正および負の整数

と一致します

生の文字列表記(r"text")は正規表現をそのまま維持します。 それがなければ、正規表現内のすべてのバックスラッシュ(「\」)は はそれを

+0

これは動作します。私は以前のre.split()とはるかに長い正規表現を試してみました。したがって、オプションであり、数字はそうではありません。 「r」は何ですか? –

+0

@JamesGoldstein、*未処理の文字列表記(** r "text" **)は正規表現をそのまま維持します。それがなければ、正規表現中のすべてのバックスラッシュ( '\')はエスケープするために別の接頭辞を付けなければなりません。 – RomanPerekhrest

1

この正規表現は、あなたの問題を解決する必要があります。

[\+\-]?[0-9]+ 

また、次のコードもあります。

re.findall関数用い
import re 
regex = re.compile(r'[\+\-]?[0-9]+') 
nums = [int(k) for k in regex.findall('5-21x')] 
関連する問題