我有以下函数获取源和修改后的字符串,并在其中加粗更改的单词。
def appendBoldChanges(s1, s2):
"Adds <b></b> tags to words that are changed"
l1 = s1.split(' ')
l2 = s2.split(' ')
for i, val in enumerate(l1):
if l1[i].lower() != l2[i].lower():
s2 = s2.replace(l2[i], "<b>%s</b>" % l2[i])
return s2
print appendBoldChanges("britney spirs", "britney spears") # returns britney <b>spears</b>
它可以在具有相同字数的字符串上正常工作,但会因sora iro days
和sorairo days
而无法使用不同的字数。
如何考虑间隔?
答案 0 :(得分:21)
您可以使用difflib,并按照以下方式执行操作:
from difflib import Differ
def appendBoldChanges(s1, s2):
"Adds <b></b> tags to words that are changed"
l1 = s1.split(' ')
l2 = s2.split(' ')
dif = list(Differ().compare(l1, l2))
return " ".join(['<b>'+i[2:]+'</b>' if i[:1] == '+' else i[2:] for i in dif
if not i[:1] in '-?'])
print appendBoldChanges("britney spirs", "britney sprears")
print appendBoldChanges("sora iro days", "sorairo days")
#Output:
britney <b>sprears</b>
<b>sorairo</b> days
答案 1 :(得分:2)
查看difflib
模块,您可以使用SequenceMatcher
在文本中查找更改的区域。
答案 2 :(得分:1)
小升级tp @fraxel答案,返回2个输出 - 原始版本和新版本带有标记的更改。 在我看来,我也将单行更改为更易阅读的版本
$sql = "INSERT INTO users (email, password, firstname, lastname, date, position, department, manager, birthdate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "sssssssss", $param_email, $param_password, $param_firstname, $param_lastname, $param_department, $param_position, $param_manager, $param_date, $param_birthdate);
$param_email = $email;
$param_password = password_hash($password, PASSWORD_DEFAULT);
$param_firstname = $firstname;
$param_lastname = $lastname;
$param_department = $department;
$param_position = $position;
$param_manager = $manager;
$param_date = $date;
$param_birthdate = $birthdate;
if(mysqli_stmt_execute($stmt)){
// Redirect to login page
header("location: index.php");
} else{
echo "Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);