我正在寻找非常大的字符串列表以及它们的变体。

我想做的就是找到两个字符串之间的隐式匹配。

例如,如果我的起始字符串是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(),但我想在这种情况下前者会更快。

09-11 19:52
查看更多