Python 在单词出现后选择子字符串

Python 在单词出现后选择子字符串,python,regex,Python,Regex,我有以下字符串s: s = "this is a test <#1> that can be a very good test (#2) to look at [#3] test [#4], but also computer <#4> and test" 到目前为止,这就是我所拥有的:我可以使用正则表达式来定位括号,例如 import re re.findall(re.compile("<.*?>"), s) 重新导入 re.findall(re.com

我有以下字符串
s

s = "this is a test <#1> that can be a very good test (#2) to look at [#3] test [#4], but also computer <#4> and test"
到目前为止,这就是我所拥有的:我可以使用正则表达式来定位括号,例如

import re
re.findall(re.compile("<.*?>"), s)
重新导入
re.findall(re.compile(“”,s)
但现在我需要对其进行概括,以查找
[…]
(…)
,并且仅在单词
test
computer
后面加括号的情况下。使用正则表达式可以实现这一点吗?

尝试以下模式:

(test|computer)\s[\[\(<](.*?)[\]\)>]
(测试计算机)\s[\[\(]
因此,代码将是:

import re
pattern = r'(test|computer)\s[\[\(<](.*?)[\]\)>]'
print(re.findall(re.compile(p), s))
重新导入
模式=r'(测试计算机)\s[\[\(]
打印(关于findall(关于编译(p),s))
输出:

[(“测试”、“1”)、(“测试”、“2”)、(“测试”、“4”)、(“计算机”、“4”)]


但是,这假设在
test
#1
之间有一个空格。如果要匹配多个空格,请将模式更改为
\s+

\3
之前既没有
test
也没有
computer
。@AhsanulHaque我更正了这一点,谢谢,我认为您不需要退出
是的,你是对的。没有检查它,只是为了安全。更新了。@N08,你确定吗,在我的测试中,它是。注意它还会找到与
计算机匹配的字符(#4>
,请参阅。注意,你不需要转义字符类中的任何字符:)(如果你将它们保留在当前位置).@AhsanulHaque是否可以对正则表达式进行泛化,使括号可以是
测试后的1、2或3.字
计算机
import re
pattern = r'(test|computer)\s[\[\(<](.*?)[\]\)>]'
print(re.findall(re.compile(p), s))