如何使用python中的正则表达式查找包括括号在内的特定格式的值

问题描述 投票:2回答:4

我有长字符串S,我想以以下格式“ Value(**)”查找值(数字),其中**是我要提取的值。

例如,S是"abcdef Value(34) Value(56) Value(13)",那么我想从S中提取值34、56、13。

我尝试如下使用正则表达式。

import re
regex = re.compile('\Value(.*'))
re.findall(regex, S)

但是代码产生了我没想到的结果。

编辑。我编辑了一些错误。

python nsregularexpression re
4个回答
0
投票

您应转义括号,更正Value的错字(与Values相对应,使用惰性转发器*?而不是*,添加缺少的右括号,并捕获转义中包含的内容)用一对括号括起来:

regex = re.compile(r'Value\((.*?)\)')

0
投票

[您的数字中只有一个跟在“值”之后,因此您可以提取括号内的任何内容。您还需要转义带有特殊字符的括号。

regex = re.compile('\(.*?\)')
re.findall(regex, S)

输出:

['(34)','(56)','(13)']


0
投票

我认为您正在寻找的是一个可以返回多个匹配项的捕获组。该字符串是:(\(\d{2}\))?\d匹配一个数字,{2}恰好匹配两个数字。 {1,2}将匹配1或2位数字。 ?匹配0到无限次。每个组都可以建立索引并合并到一个列表中。这是一个简单的实现,将返回括号内的数字。例如。 “ asdasd值(102222),fgdf(20),he(77)”将匹配20和77,但不匹配102222。


0
投票

如果您想让findall仅返回数字,则可以在后面使用与左括号匹配的外观,后跟不是右括号的任何内容:

import re

s = "abcdef Value(34) fadsifji (56) fdajklfd (13)"
regex = re.compile(r'(?<=\()[^\)]+')

re.findall(regex, s)
# ['34', '56', '13']
© www.soinside.com 2019 - 2024. All rights reserved.