我有长字符串S,我想以以下格式“ Value(**)”查找值(数字),其中**是我要提取的值。
例如,S是"abcdef Value(34) Value(56) Value(13)"
,那么我想从S中提取值34、56、13。
我尝试如下使用正则表达式。
import re
regex = re.compile('\Value(.*'))
re.findall(regex, S)
但是代码产生了我没想到的结果。
编辑。我编辑了一些错误。
您应转义括号,更正Value
的错字(与Values
相对应,使用惰性转发器*?
而不是*
,添加缺少的右括号,并捕获转义中包含的内容)用一对括号括起来:
regex = re.compile(r'Value\((.*?)\)')
[您的数字中只有一个跟在“值”之后,因此您可以提取括号内的任何内容。您还需要转义带有特殊字符的括号。
regex = re.compile('\(.*?\)')
re.findall(regex, S)
输出:
['(34)','(56)','(13)']
我认为您正在寻找的是一个可以返回多个匹配项的捕获组。该字符串是:(\(\d{2}\))?
。 \d
匹配一个数字,{2}
恰好匹配两个数字。 {1,2}
将匹配1或2位数字。 ?
匹配0到无限次。每个组都可以建立索引并合并到一个列表中。这是一个简单的实现,将返回括号内的数字。例如。 “ asdasd值(102222),fgdf(20),he(77)”将匹配20和77,但不匹配102222。
如果您想让findall
仅返回数字,则可以在后面使用与左括号匹配的外观,后跟不是右括号的任何内容:
import re
s = "abcdef Value(34) fadsifji (56) fdajklfd (13)"
regex = re.compile(r'(?<=\()[^\)]+')
re.findall(regex, s)
# ['34', '56', '13']