2015-05-08 3 views
2

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

У меня есть две строки, которые находятся в следующем формате:

s1 = '87, 72 Начало Я предложение закончить '
s2 = '93, 83 Начало Я конец предложение'

После этого ответа Replace all text between 2 strings python, я могу заменить фразу при задании начального и конечного слов, как показано ниже.

import re 
s1 = '87, 72 Start I am a sentence finish' 
s2 = '93, 83 Start I am a sentence end' 

print(re.sub("Start.*?finish", '', s1, re.DOTALL).strip()) 
print(re.sub("Start.*?end", '', s2, re.DOTALL).strip()) 

>>> 87, 72 
>>> 93, 83 

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

Можно ли заменить нужную фразу, указав только начальное слово?

Я пробовал это, но это только заменяет стартовое слово.

s1 = '87, 72 Start I am a sentence finish' 
print(re.sub("Start.*?", '', v1, re.DOTALL).strip()) 

>>> 87, 72 I am a sentence finish 

ответ

3

Используйте конец линии якоря $ и жадные соответствие .*:

print(re.sub("Start.*$", '', v1, re.DOTALL).strip()) 

См demo

Sample code:

import re 
p = re.compile(ur'Start.*$') 
test_str = u"87, 72 Start I am a sentence finish" 
result = re.sub(p, "", test_str).strip() 
print result 

Выход:

87, 72 
2

Вы можете использовать «$» для соответствия «концу строки», поэтому «Start. * $» Должен это сделать.

2

Также .. вы можете просто удалить ? (не жадный) в вашем регулярном выражении .. он будет соответствовать до конца по умолчанию ..(Жадный и нет необходимости использовать $ здесь)

print(re.sub("Start.*", '', v1, re.DOTALL).strip()) 

См DEMO

Вход:

'87, 72 Start I am a sentence finish' 

Выход:

>>> 87, 72 
1

Если у НУ просто нужно число в начале строки, вы можете использовать:

s1 = '87, 72 Start I am a sentence finish' 
print(re.sub(" Start.*$", '', s1)) 

Выход:

87, 72 

Regex объяснение:

Start.*$ 

Match the character string “ Start” literally « Start» 
Match any single character that is NOT a line break character «.*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Assert position at the end of the string, or before the line break at the end of the string, if any «$» 

Regex Demo :

https://regex101.com/r/gV9kJ6/1


Python Demo:

http://ideone.com/XU02Gf

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