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距离非常快,而且它可能不是性能关键代码。过早的优化等等。除了在他的评论中他说他正在尝试这样做:这是一个相当大的数据集。我认为这还为时过早。