繁体   English   中英

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

[英]Regular Expression to match numbers in square brackets in python

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

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()

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

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

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

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

捕获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

试试这个正则表达式: \\[\\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个数字。 如果你想更通用,你可以用\\[\\s*(\\d*)(\\s*,\\s*(\\d*)\\s*)*\\]替换这个正则表达式,允许无限数量的列表中的数字(但是您将获得第一个和最后一个仅在组\\1\\3

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM