2015-11-24 2 views
0

У меня есть строка следующим образом:Регулярное выражение, чтобы соответствовать слово, сохраняя при этом конец строки

str = 'chem biochem chem chemi hem achem abcchemde chem\n asd chem\n' 

Я хочу, чтобы заменить слово «Хим» с «химии», сохраняя при этом символ конца строки (» \ п '). Я также хочу, чтобы регулярное выражение не соответствовало словам типа «biochem», «chemi», «hem», «achem» и «abcchemde». Как я могу это сделать?

Вот что я использую, но он не работает:

import re  
re.sub(r'[ ^c|c]hem[$ ]', r' chemistry ', str) 

Спасибо

+0

Так что ваши ожидаемые матчи? –

+1

Почему не просто '\ bchem \ b'? – Jota

+0

'chem' в начале, 'chem' в середине и 'chem \ n' в конце строк. Я могу заметить, что символы \ n 'должны быть сохранены после замены. – Amir

ответ

1

Я только что нашел ответ. Благодаря @Jota.

супер-простой Regex выглядит следующим образом:

re.sub(r'\bchem\b', r' chemistry ', str) 
+1

у вас не должно быть пробелов вокруг 'химии', так как' \ b' фактически не фиксирует пробелы –

+0

Но «химия» - это просто строка замены. Что это связано с \ b? – Amir

+0

, если вы замените '' chem'' '' chemistry ''у вас будут дополнительные пробелы вокруг каждого заменителя –

5

границы использования слова:

>>> s = 'chem biochem chem chemi hem achem abcchemde chem\n asd chem\n' 
>>> import re 
>>> re.sub(r'\bchem\b','chemistry',s) 
'chemistry biochem chemistry chemi hem achem abcchemde chemistry\n asd chemistry\n' 

просто примечание, не использовать str как имя переменной, которое охватывает встроенный str тип

2

Вам необходимо использовать \b, чтобы соответствовать границе слова:

import re  
re.sub(r'\bchem\b', r'chemistry', mystring) 

(. И, как R Нар указал, следует избегать использования str в качестве имени переменной)

Смежные вопросы