Python 如何找到不完美的子字符串?
我有一个等长的子字符串列表,对于所有这些子字符串,我想在一个大字符串中找到一个位置。然而,棘手的是,我还应该找到不匹配数量有限的子字符串(也给出了不匹配的数量)。我想我可以用正则表达式来实现这一点,但我找不到方法。UPD:我正在使用Python 2.7 例如:Python 如何找到不完美的子字符串?,python,regex,python-2.7,Python,Regex,Python 2.7,我有一个等长的子字符串列表,对于所有这些子字符串,我想在一个大字符串中找到一个位置。然而,棘手的是,我还应该找到不匹配数量有限的子字符串(也给出了不匹配的数量)。我想我可以用正则表达式来实现这一点,但我找不到方法。UPD:我正在使用Python 2.7 例如: 输入字符串:s='atgtcgatcgatgctagctataaaa',输入子字符串为s0='ATG',允许的不匹配数为n=1。我想要的是返回一个iterable,比如一个位置列表:[0,7,19,23,6],它对应于“ATG”(两次)、
输入字符串:
s='atgtcgatcgatgctagctataaaa'
,输入子字符串为s0='ATG'
,允许的不匹配数为n=1。我想要的是返回一个iterable,比如一个位置列表:[0,7,19,23,6]
,它对应于“ATG”(两次)、“ATA”(两次)、“ATC”对应的位置,因为字符串中没有出现其他不匹配的3-mer。您考虑过使用Levenshtein距离算法寻求帮助吗?它用于确定两个字符串之间的相似程度
下面是一个简单的实现:
您是否考虑过使用Levenshtein距离算法寻求帮助?它用于确定两个字符串之间的相似程度 下面是一个简单的实现:
鉴于我对你的问题的理解: 类型1
def diff_count(s1, s2):
count = 0
for i in range(len(s1)):
if s1[i] != s2[i]:
count += 1
return count
def diff_filter1(s1, s2, max_count):
return diff_count(s1, s2) < max_count
鉴于我对你的问题的理解: 类型1
def diff_count(s1, s2):
count = 0
for i in range(len(s1)):
if s1[i] != s2[i]:
count += 1
return count
def diff_filter1(s1, s2, max_count):
return diff_count(s1, s2) < max_count
新模块支持模糊匹配。比如说
(?:foo){s<=2}
(?:foo){s>>regex.findall(r'(?:foo){s新模块支持模糊匹配
(?:foo){s<=2}
(?:foo){s>>regex.findall(r'(?:foo){s很高兴地展示了一些预期输出的示例,正则表达式不可能做到这一点。我遇到的所有语言中的正则表达式的默认实现都不支持这一点。到目前为止,我所知道的唯一进行模糊匹配的库是正则表达式包。输入字符串:s='atgtcgatgctagataaaa'
,Input substring是s0='ATG'
,允许的不匹配数是n=1
。我想要的是返回一个iterable,比如一个位置列表:[0,7,19,23,6]
,对应于'ATG'(2),'ATA'(2)的位置,'ATC'
相应地,因为字符串中没有其他不匹配的3-mer。请给出一些预期输出的示例,这在正则表达式中是不可能的。我遇到的所有语言中的正则表达式的默认实现都不支持这一点。到目前为止,我知道的唯一一个实现模糊匹配的库ng是正则表达式包。输入字符串:s='atgtcgatcgatagtagataaaa'
,输入子字符串是s0='ATG'
,允许的不匹配数是n=1
。我想要的是返回一个位置的可数,比如说一个列表:[0,7,19,23,6]
,它们对应于'ATG'(2),'ATA'(2)的位置,“ATC”
相应,因为字符串中没有出现任何其他不匹配的3-mer。非常感谢!这是我一直在寻找的!非常感谢!这是我一直在寻找的!
>>> regex.findall(r'(?:foo){s<=2}', 'xxfoo')
['xfo']
>>> regex.findall(r'(?:foo){s<=2}', 'xxfoo', regex.BESTMATCH)
['foo']