我在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之间。有人有什么想法吗?
2条答案
按热度按时间j2qf4p5b1#
如果在与第一次出现的1或3匹配的数字之间不可能有任何数字:
模式匹配:
\bfunctest\b\s*
匹配单词functest后跟可选空格字符(\D*)
捕获组1中的可选非数字[13]
匹配1或3\b
字边界请参见regex demo。
或者,您可以在使用取反字符类匹配数字之前排除匹配方括号:
请参见另一个regex demo。
范例
输出量
bihw5rsg2#
通过使用下面的代码找到了一种方法。它仍然包括函数测试,但至少完成了这项工作
测试变量= re.findall(r '函数测试(?:(?!函数测试).)*?239','函数测试示例一[2]函数测试示例二[239]函数测试示例一抛出[2]函数测试示例三[1]函数测试示例四[2]函数测试示例五[239]')
输出:['函数测试示例二[239','函数测试示例五[239']