2016-10-24 6 views
0

У меня есть набор некоторых слов, которые я хочу удалить из начала строки. Например: set = {"aba", "bcd"} Для строки "aba bcd aba aba aaa" результат должен быть "aaa", так и для строки
"bcd abacaba" результат должен быть "abacaba".Удалить все вхождения строк в начале строки с помощью regexp

Я попробовал этот

import re 
inp = "lalala bababa qqqq n" 
pat = re.compile(r"^([la |ba ]+") 

print pat.sub("+", inp) 

но выход

+qqqq n 

Я не понимаю, почему это игнорировать все witespaces? Что такое правильное регулярное выражение?

ответ

1

Regex для слова aba следуют один или больше пробелов 'aba +'.
Regex for word bcd, за которым следует одно или несколько пробелов 'bcd +'.
Regex для любого из них - '(aba +|bcd +)'.
Это повторный один или несколько раз '(aba +|bcd +)+'.

Замена, что с пустой строкой:

re.sub(r'(aba +|bcd +)+', '', 'aba bcd aba aba aaa') 

Обеспечение, что искали строка в начале:

re.sub(r'^(aba +|bcd +)+', '', 'aba bcd aba aba aaa') 
+0

Дa, он работает Спасибо! – brachistochron

0
inp = "lalala bababa qqqq n" 
inp = inp.split() 

вх теперь ['lalala','bababa','qqqq','n']

так возьмите последнюю часть с

inp[-1] 
0

Это то, что вы, вероятно, хотел вместо этого:

In [28]: pat = re.compile(r"^(la |ba)+") 

In [29]: pat.sub('+', 'lalala bababa qqqq n') 
Out[29]: 'lalala bababa qqqq n' 

In [30]: pat.sub('+', 'la ba qqqq n') 
Out[30]: '+qqqq n' 
Смежные вопросы