我看过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(' } ', '')
但是有没有办法结合这样一个事实:我只想在正则表达式本身中的两个模式之间得到结果?
希望这个问题有道理。任何答案都将不胜感激。
答案 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
文档中了解有关它的更多信息。