正则表达式匹配python中方括号中的数字

时间:2015-03-29 19:36:40

标签: python regex text

我需要匹配并返回方括号中包含的数字的字符串索引。示例字符串:

  

Gabrilovich和Markovitch [11,12]提出了一种使用方法   条件随机场[6]作为训练过程.....

在这里,我想使用正则表达式在上述情况下提取任何给定数字的索引,如11,12或6。我正在尝试

pattern = re.compile(r'[/11/]') # for 11
result =  re.search(pattern, text, flags=0)
print result.start()

然而有了这个,我没有得到理想的结果。注意:我需要一个解决方案来匹配我想要的确切数字,而不是括号内的任何给定数字。

3 个答案:

答案 0 :(得分:5)

使用此正则表达式(\[[,\d\s ]*)11([,\d\s ]*\])来检索文本中的所有11个

查看我上传的https://regex101.com/r/lN8mA6/1

示例

答案 1 :(得分:3)

由于在Python中我们不能使用带有标准re模块的可变宽度lookbehinds,您可以使用捕获组,然后检查该组的索引。

Sample code用于捕获11

pattern = re.compile(r'(\[[^\]]*)\b(11)\b(?=[^\]]*\])') # for 11
text = 'Gabrilovich and Markovitch [11, 12] propose a method to use conditional random fields [6] as a training process.....'
result =  re.search(pattern, text)
if result:
    print result.start(2)

结果:28

请注意,我使用11周围的字边界仅匹配11,而不是111112

答案 2 :(得分:0)

尝试此正则表达式:\[\s*(\d*)(\s*,\s*(\d*)\s*)?(\s*,\s*(\d*)\s*)?(\s*,\s*(\d*)\s*)?(\s*,\s*(\d*)\s*)?(\s*,\s*(\d*)\s*)?(\s*,\s*(\d*)\s*)?\](重复组(\s*,\s*(\d)\s*)?以允许在方括号之间获取最多7个数字),如demo所示。如果你想更通用,你可以用\[\s*(\d*)(\s*,\s*(\d*)\s*)*\]替换这个正则表达式,允许列表中包含无限数量的数字(但是你会得到第一个和最后一个只有\1组{ {1}})

如果您使用第一个,您将在逗号周围留出空格,并且您将获得第1,3,5,7,11,13和15组中的数字。