我的文字看起来像这样:
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
只要字符串中有另一个]
。
我该如何解决这个问题?
答案 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'
请查看以下链接中的“懒惰而不是贪婪”以获取更多信息
答案 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'