用空格替换每个前导或尾随连字符的最佳方法是什么?
例如,我想要
--- --- AB C-DEF -
成为
000ab --- C-def00 (其中零是空格)
我正在尝试在Python中执行此操作,但我似乎无法提出将执行替换的正则表达式。我想知道是否有另一个更好的方法来做到这一点?
答案 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'
>>>