在python中连接两个字符串的不常见文本,留下公共文本

2024-04-25 08:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条弦,如下所示

var_1=('class="input {{#if Required}}required{{/if}}"')
var_2=('class="input {{#if emailRequired}}required{{/if}}{{#if contactPointRequired}}required{{/if}}"')

我的预期结果是

'class="input {{#if Required}}{{#if emailRequired}}required{{/if}}{{#if contactPointRequired}}required{{/if}}"'.

我的意思是,我想要一个新的字符串,它在两个字符串中都有相同的元素,还有两个字符串的不同。你知道吗

如何在Python2.7中实现这一点?你知道吗


Tags: 字符串元素inputifvarrequiredclassemailrequired
1条回答
网友
1楼 · 发布于 2024-04-25 08:34:04

您可以应用以下方法:

  1. (可选)将字符串拆分为有意义的标记

  2. 为标记的字符串或列表创建^{}

  3. 根据需要格式化输出。

粗略的例子:

s1 = 'class="input {{#if Required}}required{{/if}}"'
s2 = 'class="input {{#if emailRequired}}required{{/if}}{{#if contactPointRequired}}required{{/if}}"'

# 0. Split strings into meaningful parts
# In this case I am using a crude regex to detect token boundaries
# Remember, this step is optional

import re
pat = re.compile(r'(\=+|\"+| |\{+|\}+)')
a = pat.split(s1)
b = pat.split(s2)

# 1. Create SequenceMatcher

from difflib import SequenceMatcher
matcher = SequenceMatcher(a=a, b=b, autojunk=False)

# 2. Format output
# Here I am using ANSI escape codes to colorize the output

GREEN='\033[92m'
RED='\033[91m'
ENDC='\033[0m'
line = []
for op, ai, aj, bi, bj in matcher.get_opcodes():
    if op == 'equal':
        line.extend(a[ai:aj])
    else:
        if aj > ai:
            line.append(RED)
            line.extend(a[ai:aj])
            line.append(ENDC)
        if bj > bi:
            line.append(GREEN)
            line.extend(b[bi:bj])
            line.append(ENDC)

print(''.join(line))

相关问题 更多 >