在字符串的开头,中间和结尾匹配完整的单词

时间:2015-04-06 04:56:52

标签: python regex

如何在字符串的开头,中间和结尾替换完整的单词abc.def,但不要替换abc.def.aud.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()中完成吗?

1 个答案:

答案 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)

ideone demo

如果(?<!\S)前面有非空格字符,则

abc.def会阻止匹配。

如果(?!\S)后跟非空格字符,则

abc.def会阻止匹配。

相关问题