我有一个字符串
line = "haha (as jfeoiwf) avsrv arv (as qwefo) afneoifew"
从此我想使用一些正则表达式删除"(as...)"
的所有实例。我希望输出看起来像
line = "haha avsrv arv afneoifew"
我试过了:
line = re.sub(r'\(+as .*\)','',line)
但这会产生:
line = "haha afneoifew"
答案 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)