2017-03-17 8 views
1

に特定のパターンを抽出する:桁の文字数字
の文字ができ* + -/X X

は、どのように私は3.5 <br> パターンpythonで特定のパターンを抽出したいのpython <br> に新しいですPythonの

どうすればいいですか?

私はパターン[0-9 \ */+ - xX \ 0-9]を使用しようとしましたが、文字列にあるいずれかの文字を返します。

例:2 * 3や2×3または2 + 3または2-3
を一致させる必要がありますがasdXyzはない

+0

いくつかの有効な例を提供してください。 –

+0

私は '[0-9] [\ * + -/xX] [0-9]'だけでいいと思います。 – ForceBru

答えて

2

あなたは

[0-9][*+/xX-][0-9] 

使用することができなければならないか、文字列全体にマッチする:

のPython 3.xでは
^[0-9][*+/xX-][0-9]$ 

、あなたは^(文字列アンカーの開始)と$(文字列の末尾のアンカー)の場合を破棄してもよいですre.match()関数は偽陽性を防ぐために開始し、文字列の末尾に検索を制限します

if re.fullmatch(r'[0-9][*+/xX-][0-9]', '5+5'): 
    print('5+5 string found!') 
if re.fullmatch(r'[0-9][*+/xX-][0-9]', '5+56'): 
    print('5+56 string found!') 
# => 5+5 string found! 
+1

regex = r "[0-9] [* +/xX - ] [0-9]"これは機能しました。私はいくつかのテストをさせてください。ありがとうたくさん:) –

+0

さて、私は、不要な答えの部分を削除しました。ちょうどあなたのパターンは、定義されたセット/範囲からの単一の文字にマッチしました。どのような方法を使用したかによって、異なるシナリオが異なる可能性がありますが、問題はすべてを1つの文字クラスに入れてしまうことでした。 –

1

:あなたはre.fullmatchdemo)内のパターンを使用しています。

  • 数字は\dと一致させることができます。
  • は、オペレータは、(それが特殊な正規表現文字であるため、エスケープされた)xの正確に一つの一致した[x/+\-]/+、または-と一致させることができます。
  • 最後の桁は\dと一致させることができます。
  • 各パートの周りにカッコを付けると、パートは別々のサブグループとして抽出できます。たとえば、

>>> re.match(r'(\d)([x/+\-])(\d)', '3/4').groups() 
('3', '/', '4') 
関連する問題