Как исправить захват re.sub в регулярных выражениях Python? - PullRequest
0 голосов
/ 03 апреля 2019

Я очищаю некоторые данные для анализа текста, извлеченные из PDF-файлов.Я заметил, что одной из ошибок является странный пробел в словах, заканчивающихся на «у».В частности, окончание y отрывается от слова пробелом: theor y.Я пытаюсь использовать re.sub, чтобы идентифицировать эти экземпляры, а затем свернуть пространство.

Мне удалось написать хорошую строку регулярного выражения (см. https://regex101.com/r/M1jpe6/5),, но я не получаю ожидаемых результатов. Я подозреваю, что что-то упустил из-заre.sub метод.

Вот мой игрушечный код.

import re
string = 'this is my theor y of dance'
regex_y = r'\b\w*\b(\sy)\b'

new_string = re.sub(regex_y, 'y', string)
print(new_string)

Что я ожидаю напечатать из вышеприведенного:

this is my theory of dance

но на самом деле он печатает

this is my y of dance

Поскольку единственная группа захвата в моем регулярном выражении - (\sy), я ожидаю заменить y на y. Вместо этого этоЯсно, что я сопоставляю строку большего размера theor y, а затем заменяю все это на y.

Почему это происходит, когда я только захватываю (\sy)? Как мне написать re.sub строка, чтобы она работала так, как я собираюсь?

1 Ответ

1 голос
/ 03 апреля 2019

Ваш пример немного надуманный, но если бы вы хотели удалить пробелы, прежде чем свисать y символов, я бы использовал это:

string = 'this is my theor y of dance'
string = re.sub(r'\b\s+y\b', 'y', string)
print(string)

this is my theory of dance

Проблема с использованием групп захвата заключается в том, что вы хотите отобразить все входное предложение с некоторыми изменениями. При использовании группового захвата вам нужно будет сопоставить и захватить всю строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...