用空格替换前导和尾随连字符?

时间:2009-08-28 04:31:42

标签: python regex

用空格替换每个前导或尾随连字符的最佳方法是什么?

例如,我想要

--- --- AB C-DEF -

成为

000ab --- C-def00 (其中零是空格)

我正在尝试在Python中执行此操作,但我似乎无法提出将执行替换的正则表达式。我想知道是否有另一个更好的方法来做到这一点?

3 个答案:

答案 0 :(得分:5)

re.sub(r'^-+|-+$', lambda m: ' '*len(m.group()), '---ab---c-def--')

说明:模式匹配1个或多个前导或尾随破折号;替换最好由一个callable接收,它接收每个匹配对象 - 所以m.group()是匹配的子串 - 并返回必须替换它的字符串(与所述子字符串中的字符一样多的空格,在此情况)。

答案 1 :(得分:3)

使用callable作为替换目标:

s = re.sub("^(-+)", lambda m: " " * (m.end() - m.start()), s)
s = re.sub("(-+)$", lambda m: " " * (m.end() - m.start()), s)

答案 2 :(得分:0)

每当您想要在字符串末尾匹配时,请务必仔细考虑是否需要$\Z。示例,为清晰起见使用'0'代替'':

>>> re.sub(r"^-+|-+\Z", lambda m: '0'*len(m.group()), "--ab--c-def--")
'00ab--c-def00'
>>> re.sub(r"^-+|-+\Z", lambda m: '0'*len(m.group()), "--ab--c-def--\n")
'00ab--c-def--\n'
>>> re.sub(r"^-+|-+$",  lambda m: '0'*len(m.group()), "--ab--c-def--\n")
'00ab--c-def00\n'
>>>