Python正则表达式捕获组问题

时间:2014-07-18 21:17:23

标签: python regex

尝试指定我的捕获组,但它会持续捕获太多。

行:

"This is something of [Interest: stuff]. blah blah blah"

正则表达式:

patt = re.compile('\[Interest:(.){1,100}\]')

什么是输出:

[Interest: stuff]

我想要的输出:

stuff

如何输出我想要捕获的内容,而不是整个模式?

我也试过这个:

re.compile(r'\[Interest:(?P<interest>.+)\]')

输出:

stuff]. blah blah blah

我觉得我非常接近。只需要弄清楚正则表达式击中后如何停止输出

3 个答案:

答案 0 :(得分:6)

.字符匹配除换行符之外的所有内容,包括]。因此,(.){1,100}正在告诉Python获取长达100个字符的所有内容。这包括字符串的结尾。

相反,我会使用这种模式:

\[Interest:\s([^\]]*)\]

演示:

>>> import re
>>> string = "This is something of [Interest: stuff]. blah blah blah"
>>> re.search("\[Interest:\s([^\]]*)\]", string).group(1)
'stuff'
>>>

以下是对其匹配的解释:

\[         # [
Interest:  # Interest:
\s         # A space
(          # The start of a capture group
[^\]]*     # Zero or more characters that are not ]
)          # The close of the capture group
\]         # ]

有关详细信息,请参阅Regular Expression Syntax

答案 1 :(得分:0)

使用懒惰方式从索引1获取匹配的组。

\[Interest: (.*?)\]

DEMO

示例代码:

import re
p = re.compile(ur'\[Interest: (.*?)\]', re.IGNORECASE)
test_str = u"This is something of [Interest: stuff]. blah blah blah"

re.match(p, test_str)

答案 2 :(得分:0)

正则表达式的一个问题:\[Interest:(.){1,100}\](.){1,100}允许1到100 . 捕获只有一个. ,最后一个.,因为( )仅包含.(它指的是一个字符)。因此,捕获的组将包含f stuff

相反,\[Interest: (.{1,100})\]将返回stuff

输出为[Interest: stuff] ..这是一个分组问题 试试iCodez代码HERE

>>> import re
>>> string = "This is something of [Interest: stuff]. blah blah blah"
>>> re.search("\[Interest:\s([^\]]*?)\]", string).group(1)

打印stuff

.group(1)替换为.group(0),然后打印[Interest: stuff]