Я новичок в регулярном выражении и потратил часы, пытаясь его решить, но не смог, любая помощь будет оценена. У меня есть такой текст: text = "(en termes de résultats et de qualité) sont difficiles à mesurer ....

2
Adgogo 5 Апр 2021 в 23:08

1 ответ

Лучший ответ

Ты можешь использовать

 re.sub(r"\s*(?!\.')([.,?:])(?!(?<=\d.)\d)\s*", r'\1 ', text)

Сведения о регулярном выражении :

  • \s* - ноль или более пробелов
  • (?!\.') - отрицательный просмотр вперед, который не соответствует, если есть последовательность символов .' непосредственно справа от текущей позиции
  • ([.,?:]) - ., ,, ? или :
  • (?!(?<=\d.)\d) - отрицательный просмотр вперед, который не может соответствовать, если есть цифра (которой непосредственно предшествуют цифра и любой символ) непосредственно справа от текущего местоположения
  • \s* - ноль или более пробелов.

Если вам нужно добавить больше символов в качестве «синонимов» к ', просто используйте класс символов. Вот пример с " и ':

 re.sub(r"""\s*(?!\.['"])([.,?:])(?!(?<=\d.)\d)\s*""", r'\1 ', text)
1
Wiktor Stribiżew 5 Апр 2021 в 20:33