Python:匹配包含正则表达式代码的两个变量的OR

Python:匹配包含正则表达式代码的两个变量的OR,python,regex,Python,Regex,我试图做的是获取包含通配符的用户输入文本(因此我需要保持通配符的方式),但还要查找指定的输入。例如,我在下面工作,我使用管道 我想出了如何使这项工作: dual = 'a bunch of stuff and a bunch more stuff!' reobj = re.compile('b(.*?)f|\s[a](.*?)u', re.IGNORECASE) result = reobj.findall(dual) for link in result: print link

我试图做的是获取包含通配符的用户输入文本(因此我需要保持通配符的方式),但还要查找指定的输入。例如,我在下面工作,我使用管道

我想出了如何使这项工作:

dual = 'a bunch of stuff and a bunch more stuff!'
reobj = re.compile('b(.*?)f|\s[a](.*?)u', re.IGNORECASE)
result = reobj.findall(dual)
for link in result:
        print link[0] +'    ' + link[1]
返回:
取消锁定o
nd a b

dual2 = 'a bunch of stuff and a bunch more stuff!'
#So I want to now send in the regex codes of my own.
userin1 = 'b(.*?)f' 
userin2 = '\s[a](.*?)u'
reobj = re.compile(userin1, re.IGNORECASE)
result = reobj.findall(dual2)
for link in result:
        print link[0] +'    ' + link[1]
返回:
联合国
联合国

我不明白它在做什么,就好像我去掉了打印中的所有保存链接[0]:
u
u

但是,我可以传入用户输入正则表达式字符串:

dual = 'a bunch of stuff and a bunch more stuff!'
userinput = 'b(.*?)f'
reobj = re.compile(userinput, re.IGNORECASE)
result = reobj.findall(dual)
print(result)
但当我尝试用管道将其更新为两个用户字符串时:

dual = 'a bunch of stuff and a bunch more stuff!'
userin1 = 'b(.*?)f' 
userin2 = '\s[a](.*?)u'
reobj = re.compile(userin1|userin2, re.IGNORECASE)
result = reobj.findall(dual)
print(result)
我得到一个错误:

reobj=re.compile(userin1 | userin2,re.IGNORECASE) TypeError:|“str”和“str”的操作数类型不受支持

我经常遇到这种错误,比如我在userin1 | userin2周围放上括号()或[]

我发现:

但无法让它工作;。。{-(

我想做的是能够理解如何传入这些正则表达式变量,例如OR的变量,并返回两者的所有匹配项,以及诸如and之类的东西,这最终是有用的,因为它将对文件进行操作,并让我知道哪些文件包含具有各种逻辑关系或等的特定单词

非常感谢你的想法


Brian

虽然我无法从A.Rodas那里得到答案,但他给出了.join的想法。我给出的例子——尽管回报略有不同(在链接[0]和链接[1]),但得到了预期的结果

userin1 = '(T.*?n)'
userin2 = '(G.*?p)'
list_patterns = [userin1,userin2]
swaplogic = '|'
string = 'What is a Torsion Abelian Group (TAB)?'
theresult = re.findall(swaplogic.join(list_patterns), string)
print theresult
for link in theresult:
        print link[0]+'  '+link[1]

您必须将管道用作字符串,而不是运算符。请思考:“a | b”而不是“a”|“b”