regex 在非默认模式中查找2个值之间的所有匹配项

7uzetpgm  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(152)

我在python中遇到了一个正则表达式搜索问题
所以我有:

testVariable = re.findall(r'functest(.*?)1', 'functest exampleOne [2] functest exampleTwo [1] functest exampleOne throw [2] functest exampleThree [1]')

电流输出为:

[' exampleOne [2] functest exampleTwo [', ' exampleOne throw [2] functest exampleThree [']

但是我想要的是找到'functest'和1'〈或2,或3之间的所有匹配项,根据需要〉,所以输出应该是这样的:

['exampleTwo [, exampleThree [']

这是因为上面两个都在我需要的函数和1之间。有人有什么想法吗?

j2qf4p5b

j2qf4p5b1#

如果在与第一次出现的1或3匹配的数字之间不可能有任何数字:

\bfunctest\b\s*(\D*)[13]\b

模式匹配:

  • \bfunctest\b\s*匹配单词functest后跟可选空格字符
  • (\D*)捕获组1中的可选非数字
  • [13]匹配1或3
  • \b字边界

请参见regex demo
或者,您可以在使用取反字符类匹配数字之前排除匹配方括号:

\bfunctest\b\s*([^][]*\[)[13]]

请参见另一个regex demo
范例

import re

pattern = r"\bfunctest\b\s*([^][]*\[)239]"

s = "functest exampleOne [2] functest exampleTwo [239] functest exampleOne throw [2] functest exampleThree [1] functest exampleFour [2] functest exampleFive [239]"

print(re.findall(pattern, s))

输出量

['exampleTwo [', 'exampleFive [']
bihw5rsg

bihw5rsg2#

通过使用下面的代码找到了一种方法。它仍然包括函数测试,但至少完成了这项工作
测试变量= re.findall(r '函数测试(?:(?!函数测试).)*?239','函数测试示例一[2]函数测试示例二[239]函数测试示例一抛出[2]函数测试示例三[1]函数测试示例四[2]函数测试示例五[239]')
输出:['函数测试示例二[239','函数测试示例五[239']

相关问题