我有一个正则表达式,我正在迭代我无法控制的大量搜索词。有没有办法检测特殊字符并将它们视为搜索的一部分而不是正则表达式术语?
修改 我澄清了这个问题
searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm']
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch']
for item in searchTerms:
if (re.search(item, list, re.I)):
print('found item')
答案 0 :(得分:2)
你可以逃避你的正则表达式中的(
,使它不是一个特殊的角色,而是一个匹配的角色。这样:
re.search('ThisIsMySearchString(LSB)', list, re.I)
变为
re.search('ThisIsMySearchString\(LSB\)', list, re.I)
一般情况下,您使用\
来转义特殊字符,例如.
,如果要搜索它,则会变为\.
。
<强>更新强>
好了,现在有了新的信息,我会尝试使用Python强大的电池功能来查找你的条款。类似的东西:
searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm']
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch']
for term in searchTerms:
for item in list:
if term in item:
print(f'Found {term} in the list!')
对我来说,给出了:
Found ThisIsMySearchString(LSB) in the list!
答案 1 :(得分:1)
只需使用\。
转义括号if (re.search('ThisIsMySearchString\(LSB\)', list, re.I)):
答案 2 :(得分:1)
首先在模式上使用re.escape
,然后通常使用re.search
。这假设您只有文字模式,并且从不希望模式中有任何特殊含义。
searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm']
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch']
for item in searchTerms:
for targetText in list:
if (re.search(re.escape(item), targetText, re.I)):
print('found item', item, 'in', targetText)