Python正则:Jupyter中行尾指定字符串高亮问题求解
Jupyter Notebook中行尾正则匹配与高亮解决方案
问题根源
正则表达式默认采用单行模式,此时$仅匹配整个字符串的末尾,而非每行的行尾。这就是你用coffee$|pot$|pots$在regex101(默认开启多行模式)能生效,但在Jupyter中无法匹配的核心原因。
解决方法
只需在正则匹配时添加re.MULTILINE标志,让$匹配每行的行尾(换行符前的位置),同时结合Jupyter支持的HTML标签实现高亮:
import re from IPython.display import HTML # 目标文本 poem = """ All I want is a proper cup of coffee Made in a proper copper coffee pot I may be off my dot But I want a cup of coffee From a proper coffee pot Tin coffee pots and iron coffee pots They’re no use to me If I can’t have a proper cup of coffee In a proper copper coffee pot I’ll have a cup of tea. """ # 匹配行尾目标词的正则(开启多行模式) pattern = r'coffee$|pot$|pots$' # 用<mark>标签高亮匹配到的内容 highlighted = re.sub(pattern, r'<mark>\g<0></mark>', poem, flags=re.MULTILINE) # 在Jupyter中渲染高亮文本 HTML(f'<pre>{highlighted}</pre>')
关键说明
re.MULTILINE:让^匹配每行开头,$匹配每行结尾,不受换行符是\n还是\r\n影响<mark>标签:Jupyter会解析HTML标签实现高亮;若需其他样式,可替换为<strong>或自定义CSS的span标签- 无需手动处理换行符:不要用
.replace("\n", " ")破坏文本结构,开启多行模式即可直接匹配行尾
内容的提问来源于stack exchange,提问作者SM .PRITHIV
相关产品推荐
相关产品推荐

