用空格替换前后的连字符?
如何将每个开头或结尾的连字符替换成空格,最好的方法是什么?
举个例子,我想把
---ab---c-def--
变成
000ab---c-def00
(这里的零代表空格)
我想在Python中做到这一点,但我似乎找不到合适的正则表达式来进行替换。我在想有没有其他更好的方法可以做到这一点?
3 个回答
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'
>>>
3
使用一个可调用的对象作为替代目标:
s = re.sub("^(-+)", lambda m: " " * (m.end() - m.start()), s)
s = re.sub("(-+)$", lambda m: " " * (m.end() - m.start()), s)
5
re.sub(r'^-+|-+$', lambda m: ' '*len(m.group()), '---ab---c-def--')
解释:这个模式可以匹配一个或多个开头或结尾的破折号;替换的过程最好是通过一个可调用的函数来完成,这个函数会接收每个匹配到的对象——也就是 m.group() 是匹配到的子字符串——然后返回需要替换的字符串(在这个情况下,就是用和那个子字符串一样数量的空格来替换)。