如果存在子字符串,我想使用正则表达式来匹配数字,但不匹配子字符串。因此,
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匹配。
*编辑的打字错误
发布于 2021-05-20 20:05:08
使用支持无限宽度后视模式的引擎,您可以使用
(?<=\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))https://stackoverflow.com/questions/67619349
复制相似问题