Захватывать только те символы, которые соответствуют регулярному выражению - PullRequest
1 голос
/ 18 апреля 2019

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

Мой друг голоден. Я счастлив

Цель - получить:

Мой друг голоден. Я счастлив

Как я могу сделать это, используя Regex и Python?

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

r'\s\.[a-zA-Z]'

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

Предложения

Ответы [ 2 ]

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

Что вы можете сделать, это сопоставить символ пробела и точку и использовать положительный прогноз (?=[a-zA-Z]), чтобы подтвердить то, что справа - a-zA-Z и заменить его точкой и пробелом:

\s\.(?=[a-zA-Z])

Regex demo | Python demo

Например

import re

regex = r"\s\.(?=[a-zA-Z])"
result = re.sub(regex, ". ", "My friend is hungry .I am happy")

if result:
    print (result) # My friend is hungry. I am happy

Или, как Тим Бигелейзен предлагает в комментарии, более общий вариант:

\s+\.(?=\w)

Regex demo

0 голосов
/ 18 апреля 2019

Попробуйте это:

import re

test_str = "My friend is hungry .I am happy"
regex = r"\s+\." # add `(?<=\w)` for lookahead as indicated by other answer
subst = ". "

result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
    print (result)  

Демо

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