我正在阅读具有以下格式的行
.... .... [..*stuff*..].... ... .... .... [*stuff*] ... ... [*stuff*]
点...
和*stuff*
只是数字和文字
我试图仅提取括号内文本/数字的第一个实例以及括号本身
所以...
[..*stuff*..]
目前,我的代码执行此操作,但有时如果有一组括号,它将在第一组括号后提取所有内容。
这意味着当我想要第一组括号内的所有内容时,它也会打印出字符串的其余部分
[*stuff*]...........[*sutff*].....[*stuff*]
当我只想要第一组括号和内部的所有内容时。
我使用的正则表达式为BracketedRegex = re.compile(r'\[.*\]')
。
我的代码:
BracketedRegex = re.compile(r'\[.*\]')
f = open("logfile.log","r")
for line in f.readlines():
Bracket = re.search(BracketedRegex,line)
if Bracket:
print Bracket.group()
答案 0 :(得分:5)
你需要让你的正则表达式不贪婪:
BracketedRegex = re.compile(r'\[.*?\]')
*?
量词将匹配满足该模式的最少个字符数,而不是与{em>最大号匹配的*
或者,您可以匹配任何不是右括号(而不是.
元字符)的内容:
BracketedRegex = re.compile(r'\[[^\]]*\]')
其中[^..]
否定字符类匹配不属于该类成员的任何内容,例如任何不一个]
字符。