Python:突出显示长字符串中的单词或短语

Python:突出显示长字符串中的单词或短语,python,python-3.x,regex,string,replace,Python,Python 3.x,Regex,String,Replace,我有一个很长的句子列表,我正在尝试使用ANSI颜色代码来突出显示匹配的字符串。输入不区分大小写,但我希望输出(即正匹配)保持区分大小写 #/usr/bin/env蟒蛇3 来自重新导入子项,IGNORECASE 红色='\033[31米' nul='\033[0m' 句子=[“foo foo findme 123 bar”, “foo findme foo bar 123 bar”, “foo foo FindME 123巴”] 对于句子中的句子: 搜索\u term=“findme 123” 语

我有一个很长的句子列表,我正在尝试使用ANSI颜色代码来突出显示匹配的字符串。输入不区分大小写,但我希望输出(即正匹配)保持区分大小写

#/usr/bin/env蟒蛇3
来自重新导入子项,IGNORECASE
红色='\033[31米'
nul='\033[0m'
句子=[“foo foo findme 123 bar”,
“foo findme foo bar 123 bar”,
“foo foo FindME 123巴”]
对于句子中的句子:
搜索\u term=“findme 123”
语句=sub(search_term.replace(“”,.*),f'{red}{search_term}{nul}',语句,flags=IGNORECASE)
打印(句子)
电流输出:

foo foo findme 123 bar bar # this is good
foo findme 123 bar         # this is bad
foo foo findme 123 bar bar # this is bad
期望输出:

foo foo findme 123 bar bar
foo foo FindME 123 bar bar
如何正确匹配区分大小写的字符串并防止误报重击句子的某些部分

我非常愿意使用
re
以外的库来解决这个问题,但通常更喜欢纯python3方法。

试试:

重新导入
红色=“\033[31米”
nul=“\033[0m”
句子=[
“foo foo findme 123巴”,
“foo findme foo bar 123 bar”,
“foo foo FindME 123巴”,
]
s=“findme 123”
对于句子中的句子:
句子=re.sub(
r“\b({})\b.”格式(关于转义),
r“{}\1{}”。格式(红色,nul),
判决,
flags=re.I,
)
打印(句子)
打印(截图):


谢谢,Andrej。这适用于上面的示例脚本,但由于某些原因,不适用于我的实际脚本。你能解释一下'r“\b({})\b”的作用吗?我发现'r“({})”在我的实际脚本中适用于不包含空格的搜索。例如,“findme”起作用,“findme1”不起作用。@zihobu
\b
是“单词边界”。您可以看到对您的帮助的感谢。这有点不相关,但为什么您更喜欢
导入re
而不是
从re import…,,,…
?通常只导入我们需要的东西不是更好吗?@zihobu我个人会做
导入re
。对我来说,这更容易阅读。