如何用正则表达式替换包含指定子串的完整字符串
问题描述
我有如下字符串:
str = '''
echo hello
THis works just fine . I love it  | Column 1 | Column 2 | Column 3 | | -------- | -------- | -------- | | Text | Text |  | ss Hello world! living on love '''
给定子串:35b17c4b-7f41-4552-8f9b-e883ccdc2c00,我需要移除所有包含该子串的完整行。当前尝试的正则表达式无法实现需求:
print(re.sub(r'\b(35b17c4b-7f41-4552-8f9b-e883ccdc2c00\w*)', ' ', str))
正确实现方案
要移除包含指定子串的整行,需匹配整行内容(含换行符),而非仅替换子串。以下是可行代码:
import re target_substring = '35b17c4b-7f41-4552-8f9b-e883ccdc2c00' # 构建匹配整行的正则,转义特殊字符避免解析错误 pattern = re.compile(r'^.*{}.*$\n?'.format(re.escape(target_substring)), re.MULTILINE) result = pattern.sub('', str) print(result)
代码说明
re.escape():转义目标子串中的-等正则特殊字符,防止正则语法错误。- 正则模式
^.*{}.*$\n?:^和$:配合re.MULTILINE标志,匹配每一行的开头和结尾.*:匹配行内任意字符(除换行)\n?:可选匹配换行符,避免移除行后残留空行
re.MULTILINE:让正则以行为单位匹配,而非整个字符串的首尾。
运行结果
执行后得到的结果:
echo hello
THis works just fine . I love it | Column 1 | Column 2 | Column 3 | | -------- | -------- | -------- | ss Hello world! living on love
内容的提问来源于stack exchange,提问作者Kjobber
相关产品推荐
相关产品推荐

