我需要匹配并返回方括号中包含的数字的字符串索引。示例字符串:
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()
然而有了这个,我没有得到理想的结果。注意:我需要一个解决方案来匹配我想要的确切数字,而不是括号内的任何给定数字。
答案 0 :(得分:5)
使用此正则表达式(\[[,\d\s ]*)11([,\d\s ]*\])
来检索文本中的所有11个
答案 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
,而不是111
或112
。
答案 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组中的数字。