仅提取两个正则表达式模式之间的字符串部分

时间:2015-03-03 03:30:45

标签: python regex string python-2.7

我看过this question虽然答案解决了OP的问题,但实际上并没有回答这个问题。当只知道相关部分之前和之后的模式时,如何提取给定字符串的一部分?

例如,如果我有这样的字符串:

"Hi, this is a string where only values = { 000.10, 2.00, 5.0, 10.0 } are important

鉴于此字符串,我需要专门提取000.10, 2.00, 5.0, 10.0。我不知道会有多少数字或它们的格式,甚至不知道它们之间有多少个空格,但我知道values = {}将在开头和结尾

使用正则表达式我可以通过以下方式找到values = { 000.10, 2.00, 5.0, 10.0 }

import re

string = "Hi, this is a string where only values = { 000.10, 2.00, 5.0, 10.0 } are important"

match = re.search(r'values\s=\s\{.+}\s', string)
if match:
    print match.group()
else:
    print "Could not find a match..."

哪个输出:

values = { 000.10, 2.00, 5.0, 10.0 }

那么我怎样才能只获得模式r'values\s=\s\{\}\s之间的文字?

我知道我可以用空字符串替换起始和结束模式,如下所示:

match.group().replace('values = { ', '').replace(' } ', '')

但是有没有办法结合这样一个事实:我只想在正则表达式本身中的两个模式之间得到结果?

希望这个问题有道理。任何答案都将不胜感激。

1 个答案:

答案 0 :(得分:4)

您只需要对所需的文字进行分组,例如

re.search(r'values\s=\s{\s*(.+)\s*}\s', string)

请注意{}中的parens。在这里,我们使用\s*来匹配您想要匹配的实际文本周围的0个或更多空白字符。由于捕获组不包含\s*,因此空格不会匹配。然后你会得到像这样的分组值

print match.group(1)

当您执行match.group()match.group(0)时,它会提供整个匹配的字符串。由于我们只想要与组匹配的文本,因此我们指定组的编号。您可以在Match object's group文档中了解有关它的更多信息。