1

分数が正しく入力されていない特定のケースを見つけ、分子と分母をグループとして返​​す正規表現を作成しようとしています。

これらのケースでは、スラッシュと数字の間にスペースが含まれ1 /2ます1/ 2

チェックする 2 つの個別のパターンが必要ないため、正規表現で論理 OR 演算子を使用します。

r'(\d) /(\d)|(\d)/ (\d)'

(私は\d+除算記号に直接隣接する数字にもっと興味があるので、使用していません\d+が、同様に機能します)。

問題は、ケースの 1 つ、たとえば 2 番目の ( 1/ 2) に一致する場合、すべてのグループを調べると(None, None, '1', '2')、 ('1', '2') になります。これは可能ですか?

編集: case の場合は グループ ('1', '2') を返しますが、 の1 / 2ような整形式の分数については何もキャプチャしないようにしたいと思い1/2ます。

4

2 に答える 2

3

を使用するだけではどう(\d)\s*/\s*(\d)ですか?

そうすれば、常に 2 つのグループだけを持つことができます。

>>> import re
>>> regex = r'(\d)\s*/\s*(\d)'
>>> re.findall(regex, '1/2')
[('1', '2')]
>>> re.findall(regex, '1 /2')
[('1', '2')]
>>> re.findall(regex, '1/ 2')
[('1', '2')]
>>> re.findall(regex, '1 / 2')
[('1', '2')]
>>>
于 2013-02-06T06:28:04.300 に答える
3

(\d)(?: /|/ | / )(\d)それを行う必要があります(誤って入力された分数のみを返します)。非キャプチャ グループの使用に注意してください。

編集:以下のコメントで更新。

于 2013-02-06T04:57:50.357 に答える