2016-06-02 3 views
4

У меня есть строкаРегулярное выражение подстановки в Python

line = "haha (as jfeoiwf) avsrv arv (as qwefo) afneoifew"

От этого я хочу, чтобы удалить все экземпляры "(as...)" с помощью некоторых регулярных выражений. Я хочу, чтобы выход выглядеть

line = "haha avsrv arv afneoifew"

Я пробовал:

line = re.sub(r'\(+as .*\)','',line) 

Но это дает:

line = "haha afneoifew"

ответ

4

Чтобы получить non-greedy behaviour, вы должны использовать *? вместо *, т.е. re.sub(r'\(+as .*?\) ','',line). Чтобы получить нужную строку, вам также необходимо добавить пробел, то есть re.sub(r'\(+as .*?\) ','',line).

2

Проблема заключается в том, что ваше регулярное выражение матчей вся эта группа: (as jfeoiwf) avsrv arv (as qwefo), следовательно, ваш результат.

Вы можете использовать:

>>> import re 
>>> line = "haha (as jfeoiwf) avsrv arv (as qwefo) afneoifew" 
>>> line = re.sub(r'\(+as [a-zA-Z]*\)','',line) 
>>> line 
'haha avsrv arv afneoifew' 

Надеется, что это будет полезно.

2

Вы были очень близки. Вам нужно использовать ленивый квантификатор? после .*. По умолчанию он попытается захватить самую большую группу, которую это возможно. С ленивым квантором он фактически попытается сопоставить наименьшие возможные группы.

line = re.sub(r'\(+as .*?\) ','',line) 
Смежные вопросы