用空格替换前后的连字符?

2 投票
3 回答
1146 浏览
提问于 2025-04-15 13:55

如何将每个开头或结尾的连字符替换成空格,最好的方法是什么?

举个例子,我想把

---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() 是匹配到的子字符串——然后返回需要替换的字符串(在这个情况下,就是用和那个子字符串一样数量的空格来替换)。

撰写回答