Как заменить подстроку, но только если она встречается ровно между двумя словами - PullRequest
1 голос
/ 20 июня 2019

В python мне нужно заменить " - " на "-", но только если между двумя словами встречается [SPACE][DASH][SPACE].

[SPACE][SPACE][DASH][SPACE][SPACE] не изменится.Т.е.:

" - The quick - brown fox jumps - over the -" должно было бы измениться на

" - The quick-brown fox jumps - over the -"

This is jumps[SPACE][SPACE][DASH][SPACE][SPACE] ...

Я не могу обернуть свою голову в регулярное выражение.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы можете использовать это регулярное выражение для поиска по границе слова:

\b - \b

Демонстрация RegEx

Из-за границы слова на обеих сторонах оно будет совпадать только тогда, когдапробел с обеих сторон окружен символами слова.

Код:

import re

test_str = " - The quick - brown fox jumps  -  over the -"


# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(r"\b - \b", '-', test_str)

if result:
    print (result)
0 голосов
/ 22 июня 2019

С помощью @ anubhavva я построил эту универсальную функцию:

def replace_in_word(replace_in, replace_what, replace_with):
    #in string replace_in, replace_what with replace_with, and return the string
    #but only inside a word
    #if not found, return unchanged string
    return(re.sub(r"\b%s\b" % replace_what, replace_with, replace_in))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...