在正则表达式中抓取括号和所有内容

时间:2014-01-16 20:52:42

标签: python regex

我正在阅读具有以下格式的行

.... .... [..*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()

1 个答案:

答案 0 :(得分:5)

你需要让你的正则表达式不贪婪:

BracketedRegex = re.compile(r'\[.*?\]')

*?量词将匹配满足该模式的最少个字符数,而不是与{em>最大号匹配的*

或者,您可以匹配任何不是右括号(而不是.元字符)的内容:

BracketedRegex = re.compile(r'\[[^\]]*\]')

其中[^..]否定字符类匹配不属于该类成员的任何内容,例如任何一个]字符。