我正在寻找非常大的字符串列表以及它们的变体。
我想做的就是找到两个字符串之间的隐式匹配。
例如,如果我的起始字符串是foo-bar
,则我希望匹配项找到Foo-bAr
foo Bar
甚至foo(bar...
。当然,foo-bar
也应该返回一个匹配项。
编辑:更具体地说,我需要以下比赛。
字符串本身,不敏感。
用空格分隔任何字符的字符串
带括号的字符串分隔任何字符。
如何编写满足这些条件的表达式?
我意识到这可能需要一些棘手的正则表达式。问题是,我需要搜索大量的字符串,而我觉得regex只是使此字符串变得如我所愿的强大工具。
也许正则表达式不是最好的解决方案?
感谢您的帮助。我仍在学习正则表达式中的思考。
最佳答案
>>> def findString(inputStr, targetStr):
... if convertToStringSoup(targetStr).find(convertToStringSoup(inputStr)) != -1:
... return True
... return False
...
>>> def convertToStringSoup(testStr):
... testStr = testStr.lower()
... testStr = testStr.replace(" ", "")
... testStr = testStr.replace("(", "")
... testStr = testStr.replace(")", "")
... return testStr
...
>>>
>>> findString("hello", "hello")
True
>>> findString("hello", "hello1")
True
>>> findString("hello", "hell!o1")
False
>>> findString("hello", "hell( o)1")
True
应该根据您的规范工作。显然,可以进行优化。您正在询问正则表达式,我正在努力思考,希望很快会用一些好的方法编辑此问题。但是,如果这不太慢,则正则表达式可能会很痛苦,可读性通常更好!
我注意到您一直在寻找相同的大海捞针。显然,您只需将其转换为“串汤”即可!
编辑:我一直在考虑正则表达式,您做的任何正则表达式都需要有许多子句,或者像我在此答案中所做的那样,必须在正则表达式前修改文本。我还没有基准化string.find()和re.find(),但我想在这种情况下前者会更快。