Python 1-不匹配正则表达式
可能重复:Python 1-不匹配正则表达式,python,regex,Python,Regex,可能重复: 我得到一个字符串s和一个字符串t。是否有一个正则表达式来查找t在s中出现的最多一个不匹配字符。(最多允许用另一个字符替换t中的一个字符)。是的,绝对允许。例如,如果t是“abcde”,那么这样的正则表达式就是 .bcde|a.cde|ab.de|abc.e|abcd. 这就是说,这几乎肯定不是最好或最有效的方法,特别是如果t很大的话。(如果它很大,则可以通过将其重新格式化为 .bcde|a(?:.cde|b(?:.de|c(?:.e|d.))) 或者可能是 a(?:b(?:c(
我得到一个字符串
s
和一个字符串t
。是否有一个正则表达式来查找t
在s
中出现的最多一个不匹配字符。(最多允许用另一个字符替换t
中的一个字符)。是的,绝对允许。例如,如果t
是“abcde”
,那么这样的正则表达式就是
.bcde|a.cde|ab.de|abc.e|abcd.
这就是说,这几乎肯定不是最好或最有效的方法,特别是如果t
很大的话。(如果它很大,则可以通过将其重新格式化为
.bcde|a(?:.cde|b(?:.de|c(?:.e|d.)))
或者可能是
a(?:b(?:c(?:d.|.e)|.de)|.cde)|.bcde
但是这仍然不是最好的方法。)我不一定要用正则表达式这样做。您可以使用Levenshtein距离
>>> import Levenshtein
>>> s = "spam ham and eggs"
>>> t = "ram"
>>> for i,_ in enumerate(s):
... s_ = s[i:i+len(t)]
... if Levenshtein.distance(s_, t) == 1:
... print s_
...
pam
ham
请添加一些示例数据,以发挥作用,它使事情easier@Robjong:这就是我想做的。我不是这方面的专家,但你可以使用一个变体,允许最多1个不匹配:@Randomblue-如果你可以引用另一个SO问题,涵盖这个完全相同的主题,这不应该作为重复关闭吗?我在另一个问题中发布了两个可能的解决方案,包括一个pyparsing解决方案,它不仅处理单个不匹配,还处理n-不匹配。你试过这些吗?@PaulMcGuire:是的,应该试一下。我只是在发布后才注意到…听起来不太理想。Levenshtein即使在1个错误之后也会继续计数是的,但是Levenshtein距离非常快,而且它可能不是性能关键代码。过早的优化等等。除了在他的评论中他说他正在尝试这样做:这是一个相当大的数据集。我认为这还为时过早。