2014-09-17 4 views
1

Я хочу удалить слово Dr и его последовательное слово.
для например
regex удалить совпадающее слово и последовательное слово

Входной

Финансовое раскрытие Dr Кучер
Пациент 1 имел неблагоприятные события и др Bodendieck предполагает, что пациент 1 не терпит молока ответственности
наркотиков регистрации и соответствия пациентам.

В приведенном выше шаблоне ввода я хочу, чтобы удалить весь текст выделен жирным шрифтом

Выход

Финансовое раскрытие
у 1 пациента неблагоприятных событий и предполагает, что пациент 1 не переносит молоко
Налоговая отчетность соответствие журналу и пациенту.

шаблон я использую
/[(D|d)r]\s*(?=\w+)

Согласно моему пониманию
[(D | d) г] должны соответствовать "Dr" или "д-р"
\ s * должно соответствовать пробелам
(? = \ w +]) должно совпадать с ближайшим последовательным словом.

Ссылка на шаблон
http://regex101.com/r/eU5yT8/2

Однако выше шаблон не получает соответствует Я новичок в формировании регулярных выражений. Пожалуйста, помогите мне понять мои mistake.thanks

ответ

1

Оно должно быть:

re.sub(r'\b[Dd]r\s+\w+', '', txt) 

когда вы завернуть в (?=...) это будет выглядеть упреждающего но не потреблять, как в the documentation: Isaac (?=Asimov) будет матч'Isaac ', только если за ним следует 'Asimov'. Это означает, что он не будет соответствовать 'Asimov':

>>> re.findall(r'Isaac (?=Asimov)', 'Isaac Asimov') 
['Isaac '] 

также, что вам нужно [Dd]r что означает либо D или d с последующим r, или в качестве альтернативы (Dr|dr).

\b бы указать границу слова, в противном случае, он будет соответствовать dr в конце слова (если есть такое слово):

>>> re.sub(r'[Dd]r\s*\w+', '', 'xdr test') 
'x' 

Вам понадобится \s+, или в противном случае он будет соответствовать dr в середине слова:

>>> re.sub(r'\b[Dd]r\s*\w+', '', 'drug') 
'' 
Смежные вопросы