存在子字符串时正则表达式匹配

时间:2021-05-20 11:20:10

标签: regex

如果存在子字符串,我想使用正则表达式来匹配数字,但不匹配子字符串。因此,

2-4 foo
foo 4-6
bar 8

应该匹配

2, 4
4, 6

我现在有

(\d{0,}\.?\d{1,})

返回数字(整数或浮点数)。使用

(\d{0,}\.?\d{1,}(?=\sfoo))

只匹配4,而不匹配24。我也试过先行

^(?=.*?\bfoo\b)(\d{0,}\.?\d{1,})

但仅匹配 2

*编辑错别字

1 个答案:

答案 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))