2017-09-02 30 views
2

でエキス番号Iは、以下の式があるとします。正規表現:表現

"1+3x+52-9-45x+x" 

私の目標は、すべての定数を抽出することである。 [1、+ 52、-9]

私が持っていますパイソンを使用してみました:

re.findall("[+-]?\d+","1+3x+52-9-45x+x") 

結果は次のとおりです。

[ '1'、 '3'、 '52'、 '-9'、 '-45'] xの的係数も抽出されるので、正しくない

私も試してみました:

re.findall("[+-]?\d+[+-]?","1+3x+52-9-45x+x") 

しかし、まだ機能していませんが。

+0

ここで、sampe入力に「-3」があり、なぜ「-9」が期待されないのですか? – Yunnosch

答えて

3

この正規表現を試してみてください:

(?:[+-])?\b\d+\b 

Demo

OR

(?:[+-])?\d+(?=[\s+-]|$) 

Demo

(第一正規表現のための)説明:

非単語の間に1桁以上のマッチング +-オプション
  • \b\d+\b(そう、それは含まれませんを作る+-(したい場合は複数のオペレータを追加)
  • ?いずれかに該当
    • 第2の正規表現のための係数)

    説明():

    • マッチングのどちらか+または-作る
    • ?(必要に応じ複数のオペレータを追加)直後に続く+または-オプション
    • \d+(?=[+-])マッチング1桁以上(貪欲)+または-か空白または行末である場合。必要に応じて演算子を追加できます。
  • +0

    私は試みました:re.findall( "(?:[+ - ])?\ b \ d + \ b"、 "1 + 3x + 52-9-45x + x")。しかし空になった。私はここに何かを逃していますか? – derek

    +0

    私はそれを得た。あなたのパターンの前に生の文字列マーカー "r"を使用することを忘れないでください。 re.findall(r "(?:[+ - ])?\ b \ d + \ b"、 "1 + 3x + 52-9-45x + x")。これは完全に動作します1 – derek