如何在字符串的开头,中间和结尾替换完整的单词abc.def
,但不要替换abc.def.au
或d.abc.def
之类的文字:
line = "abc.def abc.def.au abc.def d.abc.def abc.def"
new_line = re.sub("abc.def", "-----", line)
print(line)
print(new_line)
当前输出:
abc.def abc.def.au abc.def d.abc.def abc.def
----- -----.au ----- d.----- -----
预期产出:
abc.def abc.def.au abc.def d.abc.def abc.def
----- abc.def.au ----- d.abc.def -----
这可以在一个re.sub()
中完成吗?
答案 0 :(得分:3)
您可以使用线锚。 ^
和$
分别仅匹配字符串的开头和字符串的结尾,因此您可以像这样使用它们:
line = "abc.def abc.def.au abc.def d.abc.def abc.def"
new_line = re.sub(r"^abc\.def|abc\.def$", "-----", line)
print(line)
print(new_line)
请注意,它对原始正则表达式字符串更安全,并转义.
字符(与正则表达式中几乎任何字符匹配)。
如果您只想替换整个字词,则需要一些外观:
line = "abc.def abc.def.au abc.def d.abc.def abc.def"
new_line = re.sub(r"(?<!\S)abc\.def(?!\S)", "-----", line)
print(line)
print(new_line)
如果(?<!\S)
前面有非空格字符,则 abc.def
会阻止匹配。
(?!\S)
后跟非空格字符,则 abc.def
会阻止匹配。