2015-11-10 1 views
3

Я пытаюсь сопоставить начало слова, а затем что-то заменить слово. Ниже я пытаюсь это сделать.Python Regex с использованием подстановочного знака в соответствии с началом строки и заменой всей строки

add23khh234 > REMOVED 
add2asdf675 > REMOVED 

Ниже приведено выражение регулярного выражения, которое я использую.

string_reg = re.sub(ur'add*', 'REMOVED', string_reg) 

Но этот код дает мне следующее.

add23khh234 > REMOVED23khh234 
add2asdf675 > REMOVED2asdf675 

ответ

0

Попробуйте

string_reg = re.sub(ur'^add.*', 'REMOVED', string_reg) 
1

add* является ad '*d'. From the document:

'*'

Причины результирующий RE, чтобы соответствовать 0 или более повторений предыдущего RE, как много повторений, как возможно. ab* будет соответствовать a, ab, или a, за которым следует любое число b.

Так что вышлет ad или add или adddddd.... Но он не соответствует ни add23khh234, ни add2asdf675 (или что-то в этом роде).

Здесь вы должны использовать .+? или .*? (не .*, это жадно). Попробуйте что-то вроде этого:

string_reg = re.sub(ur'add.+? ', 'REMOVED ', string_reg) 

Демо:

>>> import re 
>>> string_reg = """\ 
... add23khh234 > REMOVED23khh234 
... add2asdf675 > REMOVED2asdf675""" 

>>> string_reg = re.sub(ur'add.+? ', 'REMOVED ', string_reg) 
>>> print string_reg 
REMOVED > REMOVED23khh234 
REMOVED > REMOVED2asdf675 
>>> 
+1

Это верно, за исключением того, что '. + *' Не имеет смысла. Я думаю, вы имели в виду '. *?'. –

+0

@EdCottrell Упс, я всегда использую '. +?': P. Ред. –

0

, если у вас есть Mulitple узоры на одной линии

string_reg=re.sub("add[^ ]+","REMOVED",string_reg) 
0

Короткий ответ

\badd\w* 

A quantifier, такой как *, применяется к предыдущему токену или подшаблону. например, регулярное выражение, которое вы используете add*, соответствует буквалу ad, за которым следует любое количество последующих d.

Встреча ваши критерии

  • Вы должны соответствовать add на beggining слова, поэтому использовать word boundary\b
  • Тогда вы также должны соответствовать остальной части слова, чтобы чтобы заменить его.\w - это shorthand для [a-zA-Z0-9_], который соответствует 1 символу слова, и это то, что вам нужно повторять любое количество раз с *.

Код

import re 

string_reg = 'add23khh234 ... add2asdf675 ... xxxadd2axxx' 

string_reg = re.sub(ur'\badd\w*', 'REMOVED', string_reg) 
print(string_reg) 

Выход

REMOVED ... REMOVED ... xxxadd2axxx 

ideone demo

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