Python中的正则表达式替换

时间:2016-06-02 06:42:10

标签: python regex python-3.x

我有一个字符串

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

从此我想使用一些正则表达式删除"(as...)"的所有实例。我希望输出看起来像

line = "haha avsrv arv afneoifew"

我试过了:

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

但这会产生:

line = "haha afneoifew"

5 个答案:

答案 0 :(得分:4)

要获得non-greedy behaviour,您必须使用*?代替*,即re.sub(r'\(+as .*?\) ','',line)。要获得所需的字符串,您还必须添加一个空格,即re.sub(r'\(+as .*?\) ','',line)

答案 1 :(得分: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 :(得分:2)

你非常接近。你需要使用懒惰的量词'?'之后。*。默认情况下,它会尝试捕获它可能的最大组。使用惰性量词,它实际上会尝试匹配最小的可能组。

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

答案 3 :(得分:2)

尝试:

arr

答案 4 :(得分:1)

尝试:

re.sub(r'\(as[^\)]*\)', '', line)