1. ホーム
  2. python

[解決済み] Python で \d+s+/↵を使おうとすると、うまくいかない。

2022-03-04 16:27:34

質問

テキストに数字、スペース、"/"、スペース、数字が入ったものを「数字の数字」に置き換えたいのですが、どの方法もうまくいきません。

import re

text = '6/6, 7 / 40, 7/ 6, 8 /97'
print(re.sub(r'\d+/\d+', ' number of number ', text))  # works
print(re.sub(r'\d+\s+/\d+', ' number of number ', text)) # works
print(re.sub(r'\d+/\d+\s+', ' number of number ', text)) # not works
print(re.sub(r'\d+\s+/\d+\s+', ' number of number ', text)) # not works

解決方法は?

末尾のホワイトスペースにマッチするパターンを / を変更し + の後の量詞は \s から * を使用することができます。

import re
text = '6/6, 7 / 40, 7/ 6, 8 /97'
print(re.sub(r'\d+\s*/\s*\d+', ' number of number ', text))

をご覧ください。 正規表現デモ レグレクトグラフ :

パターンの詳細

  • \d+ - 1桁以上
  • \s*/\s* - a / 0個以上の空白で囲まれた
  • \d+ - 1桁以上の数字

ノート : Python 3.x では re の場合、速記文字クラスは Unicode を意識しています。ASCII 桁のみにマッチするように [0-9] の場合、この文字クラスを使うか、あるいは re.ASCII フラグを使用します(これは \s が、)。

re.sub(r'\d+\s*/\s*\d+', ' number of number ', text, flags=re.ASCII)