python - 查找两个字符串的接触部分和非接触部分

标签 python string

<分区>

我有两个字符串对的例子

YHFLSPYVY      # answer
   LSPYVYSPR   # prediction
+++******ooo


  YHFLSPYVS    # answer
VEYHFLSPY      # prediction
oo*******++

如上所述,我想在答案 (+) 和预测 (o)。

如何在 Python 中完成?

我被这个困住了

import re
# This is of example 1
ans = "YHFLSPYVY"
pred= "LSPYVYSPR"
matches = re.finditer(r'(?=(%s))' % re.escape(pred), ans)
print [m.start(1) for m in matches]
#[]

例如1我希望得到的答案是:

plus_len = 3
star_len = 6
ooo_len = 3

最佳答案

使用 difflib.SequenceMatcher.find_longest_match 很容易:

from difflib import SequenceMatcher

def f(answer, prediction):
    sm = SequenceMatcher(a=answer, b=prediction)
    match = sm.find_longest_match(0, len(answer), 0, len(prediction))
    star_len = match.size
    return (len(answer) - star_len, star_len, len(prediction) - star_len)

该函数返回整数的三元组(plus_len, star_len, ooo_len):

f('YHFLSPYVY', 'LSPYVYSPR') -> (3, 6, 3)
f('YHFLSPYVS', 'VEYHFLSPY') -> (2, 7, 2)

关于python - 查找两个字符串的接触部分和非接触部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613045/

相关文章:

python - 如何在 PyPi 中的某个根包下组织我的包?

javascript - Django json 单引号和双引号?

python - Pandas groupby().get_group().size 未返回正确的大小?

python - 为什么 python 内置的二进制搜索功能运行速度如此之快?

java - 使用java在文件中搜索unicode字符串

java - 字符串到二进制,反之亦然 : extended ASCII

python - 用户定义的方法和 __func__ 属性

java - 如何从 java.lang.String 获取 java.io.InputStream?

javascript - 使用字符串拆分而不是带有子字符串的数组声明数组

c - 遍历末尾为零的字符串数组