【问题标题】:Replacing leading and trailing hyphens with spaces?用空格替换前导和尾随连字符?
【发布时间】:2009-08-28 12:54:44
【问题描述】:

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

例如,我想要

---ab---c-def--

成为

000ab---c-def00 (零是空格)

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

【问题讨论】:

    标签: python regex


    【解决方案1】:
    re.sub(r'^-+|-+$', lambda m: ' '*len(m.group()), '---ab---c-def--')
    

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

    【讨论】:

      【解决方案2】:

      使用可调用对象作为替换目标:

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

      【讨论】:

      • Alex 的回答更简洁。 :-)
      【解决方案3】:

      当你想匹配一个字符串的末尾时,一定要仔细考虑你需要$还是\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'
      >>>
      

      【讨论】:

        猜你喜欢
        • 2018-04-11
        • 1970-01-01
        • 2021-03-31
        • 2022-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        相关资源
        最近更新 更多