Условная замена строк в ряду - PullRequest
0 голосов
/ 19 мая 2019

Я хочу заменить слово в строке (абзаце) условно, как в этом примере:

text = "here is a semi colon and a semi as an example and here again a semi colon"

Я хочу заменить "полу" на ":" а также "точка с запятой" by ";"

Но когда я это сделаю:

re.sub(r'semi', r":", text)

Я получаю:

text = "here is a : colon and a : as an example and here again a : colon"

Так что я не хочу менять его, если в тексте есть «точка с запятой».

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Вам нужен отрицательный взгляд («полу» , а не , за которым следует «двоеточие»):

re.sub(r'semi(?!\s*colon)', r":", text)
#'here is a semi colon and a : as an example and here again a semi colon'
0 голосов
/ 19 мая 2019

Вы можете захватить оба желаемых выхода, однако, возможно, вы захотите заменить их один на один:

(semi colon)|(semi(?!:(\scolon)))

enter image description here

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить его выражения в regex101.com .

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

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