вставить пробел между соответствием регулярному выражению - PullRequest
1 голос
/ 09 июля 2019

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

Я попытался решить аналогичный вопрос ... но у меня не получилось - ( Вставить пробел между символами regex );решение - использовать заменяющую строку как '\ 1 \ 2' в re.

import re

corpus = ''' 
This is my corpus1a.I am looking to convert it into a 2corpus 2b.
'''

clean = re.compile('\.[^(\d,\s)]')
corpus = re.sub(clean,' ', corpus)

clean2 = re.compile('\d+[^(\d,\s,\.)]')
corpus = re.sub(clean2,'\1 \2', corpus)

ОЖИДАЕМЫЙ ВЫХОД:

This is my corpus 1 a. I am looking to convert it into a 2 corpus 2 b.

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

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

Также нет необходимости использовать + после \d.Вам нужно только соответствовать последней цифре числа.

clean = re.compile(r'(\d)([^\d,\s])')
corpus = re.sub(clean, r'\1 \2', corpus)

DEMO

0 голосов
/ 09 июля 2019

Группы захвата, отмеченные круглыми скобками ( и ), должны быть вокруг шаблонов, которые вы хотите сопоставить.

Так что это должно работать для вас

clean = re.compile(r'(\d+)([^\d,\s])')
corpus = re.sub(clean,'\1 \2', corpus)

Регулярное выражение(\d+)([^\d,\s]) читает: совпадать с 1 или более цифрами (\d+) в качестве группы 1 (первый набор скобок), сопоставлять без цифр и без пробелов в качестве группы 2.

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

0 голосов
/ 09 июля 2019

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

(\d+)([a-z]+)\b

, после этого мы заменили бы любые два пробела одним пробелом, и это могло быработать, но не уверен:

import re

print(re.sub(r"\s{2,}", " ", re.sub(r"(\d+)([a-z]+)\b", " \\1 \\2", "This is my corpus1a.I am looking to convert it into a 2corpus 2b")))

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

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