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

Python 抓取括号和正则表达式中的所有内容,python,regex,Python,Regex,我正在读一行,格式如下 .... .... [..*stuff*..].... ... .... .... [*stuff*] ... ... [*stuff*] 其中点…和*东西*只是数字和文本 我试图只提取括号内文本/数字的第一个实例以及括号本身 所以 目前,我的代码是这样做的,但有时如果有多组括号,它会在第一组括号之后提取所有内容 这意味着,当我需要第一组括号中的所有内容时,它还将打印出字符串的其余部分 当我只想要第一组括号和里面的所有东西时 我使用的正则表达式是BracketedR

我正在读一行,格式如下

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

您需要使您的正则表达式不贪婪:

BracketedRegex = re.compile(r'\[.*?\]')
*?
量词将匹配满足模式的最少数量的字符,而
*
将匹配最大数量的字符

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


如果
[^..]
负字符类与任何非该类成员的内容相匹配,例如任何非
]
字符的内容。

您需要将正则表达式设置为非贪婪:

BracketedRegex = re.compile(r'\[.*?\]')
*?
量词将匹配满足模式的最少数量的字符,而
*
将匹配最大数量的字符

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


如果
[^..]
负字符类匹配任何不是该类成员的内容,例如任何不是
]
字符的内容。

似乎有人认为非贪婪的regexp总是错误的解决方案,不管怎样,尽管我一直不明白他们为什么认为……这几乎就是使用它们的范例。@abarnert:除了我最近的另一个
[regex]
答案也被否决,一个没有使用
*
的答案与
*?
的答案相比。也许有人不喜欢我回答正则表达式的问题。似乎有人认为,不管怎样,非贪婪的正则表达式总是错误的解决方案,尽管我一直不明白他们为什么认为……这几乎就是使用正则表达式的范例。@abarnert:除了最近的另一个
[regex]
我的答案也被否决了,一个没有使用
*
的答案和
*?
的答案相比。也许有人不喜欢我回答正则表达式问题。