Python Regex - заменить указанное c слово (без ха sh) другим словом - PullRequest
2 голосов
/ 15 февраля 2020

Я хочу заменить только указанное c слово в одной строке. Тем не менее, некоторые другие слова имеют это слово внутри, но я не хочу, чтобы они были изменены.

Например, для приведенной ниже строки я хочу заменить только x на y в строке z. как это сделать?

x = "112-224"
y = "hello"
z = "This is the number 112-224 not #112-224"

Когда я делаю re.sub(r'\b' + x + r'\b', y, z), я получаю 'This is the number hello not #hello'. Так что в основном не работает с этим регулярным выражением. Я действительно не очень хорош в этом регулярном выражении. Какой правильный способ сделать это? Итак, я могу получить This is the number hello not #112-224.

Ответы [ 2 ]

3 голосов
/ 15 февраля 2020

Как насчет этого:

pattern = r'(?<=[\w\s\n\r\^])'+x+r'(?=[\w\s\n\r$])'

С полным кодом:

x = "112-234"
y = "hello"
z = "112-234this is 112-234 not #112-234"

pattern = r'(?<=[\w\s\n\r\^])'+x+r'(?=[\w\s\n\r$])'

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

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

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

1 голос
/ 15 февраля 2020

Использование прогнозирования:

re.sub("\d{3}-\d{3}(?=\s)",y,z)
'This is the number hello not #112-224'

Выше предполагается, что цифры всегда будут не более трех.

В качестве альтернативы:

re.sub("\d.*\d(?=\s)","hello",z)
'This is the number hello not #112-224'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...