При попытке использовать \ d + \ s + / \ d + \ s + в python, это не работает - PullRequest
1 голос
/ 25 февраля 2020

Мне нужно заменить текст, содержащий число, может быть, несколько пробелов, затем «/», затем, возможно, несколько пробелов и число, на «номер числа», но не все методы работают:

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

1 Ответ

3 голосов
/ 25 февраля 2020

Вы должны переместить шаблон совпадения в конце пробела сразу после /, изменить квантификаторы + после \s на *, и тогда вы можете использовать

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

См. regex demo и Regulex graph :

enter image description here

Детали шаблона

  • \d+ - 1+ цифр
  • \s*/\s* - /, заключенный в 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)
...