如果存在子字符串,我想使用正则表达式来匹配数字,但不匹配子字符串。因此,
2-4 foo
foo 4-6
bar 8
应该匹配
2, 4
4, 6
我现在有
(\d{0,}\.?\d{1,})
返回数字(整数或浮点数)。使用
(\d{0,}\.?\d{1,}(?=\sfoo))
只匹配4
,而不匹配2
和4
。我也试过先行
^(?=.*?\bfoo\b)(\d{0,}\.?\d{1,})
但仅匹配 2
。
*编辑错别字
答案 0 :(得分:1)
对于支持无限宽度后视模式的引擎,您可以使用
(?<=\bfoo\b.*)\d*\.?\d+|\d*\.?\d+(?=.*?\bfoo\b)
见this regex demo。它匹配任何零个或多个数字,后跟一个可选的点,然后是一个或多个数字,无论是前面有一个完整的单词 foo
(不一定是立即),还是后面有 foo
整个单词的右侧某处.
当您可以访问代码时,您可以简单地检查文本中是否存在该单词,然后提取所有匹配项。在 Python 中,你可以使用
if 'foo' in text:
print(re.findall(r'\d*\.?\d+', text))
# Or, if you need to make sure the foo is a whole word:
if re.search(r'\bfoo\b', text):
print(re.findall(r'\d*\.?\d+', text))