2

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

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

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]

返回:
unch o
       nd ab

同样

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]

哪个返回:
u n
n

我不明白它在做什么,好像我摆脱了打印中的所有保存链接 [0] 我得到 :

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

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: unsupported operand type(s) for |: 'str' and 'str'

我经常收到此错误,例如如果我在 userin1|userin2 周围加上括号 () 或 []。

我发现了以下内容:

Python 正则表达式或

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

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

非常感谢您的想法,

布赖恩

4

1 回答 1

1

虽然我无法从 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]
于 2013-04-07T20:50:38.343 回答