尝试指定我的捕获组,但它会持续捕获太多。
行:
"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
我觉得我非常接近。只需要弄清楚正则表达式击中后如何停止输出
答案 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: (.*?)\]
示例代码:
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]
。