re.sub替换了比想要更多的文本

时间:2015-04-23 20:24:29

标签: regex string

我的文字看起来像这样:

blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah

我希望用“BRACKET”替换括号内的所有文字

blah blah BRACKET asda asdasd BRACKET blah

我的正则表达是这样的:

re.sub('\[.*\]','BRAKCET',text)

正在制作

blah blah BRACKET blah

只要字符串中有另一个]

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

你贪婪匹配正则表达式

即[。*]尝试匹配'['和']'之间可能的 LONGEST 字符串。 您需要通过添加“

来使用非贪婪的正则表达式
>>> text = '''blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah'''
>>> re.sub('\[.*?\]','BRAKCET',text)
'blah blah BRAKCET asda asdasd BRAKCET blah'

请查看以下链接中的“懒惰而不是贪婪”以获取更多信息

http://www.regular-expressions.info/repeat.html

答案 1 :(得分:0)

使用非贪婪选项:$< lines = $PLUMA_SELECTED_TEXT.split("\n") if lines == ['']: # Already commented line ... if $PLUMA_CURRENT_LINE.startswith("#"): return $PLUMA_CURRENT_LINE[1:] else: # ... then uncomment it return "#" + $PLUMA_CURRENT_LINE else: output = ""; for line in lines: if line.startswith("#"): output += line[1:] + "\n" else: output += "#" + line + "\n" return output.rstrip() >

例如:

?

答案 2 :(得分:0)

你需要使用无贪婪的令牌:

>>> s='blah blah [text in brackets] asda asdasd [more text in brackets 1234] blah'
>>> import re
>>> re.sub('\[.*?\]','BRAKCET',s)
'blah blah BRAKCET asda asdasd BRAKCET blah'