【问题标题】:"ReplaceWith" & - but only part of it"ReplaceWith" & - 但只是其中的一部分
【发布时间】:2012-05-01 06:16:44
【问题描述】:

我需要对包含逗号且后面没有空格的文本执行搜索/替换,以更改为逗号+空格。

所以我可以使用:

,[^\s]

但我正在为更换而苦苦挣扎;我不能只使用:

 , (space, comma)

或者

& ,

因为匹配最初匹配两个字符。

有没有办法说 '&' - 1 ?或 '&[0]' 或什么意思;替换参数中的“匹配的字符串,但只是其中的一部分”?

尝试询问这个问题的另一种方式:

  1. 我可以使用正则表达式来识别我的字符串的一部分吗?
  2. 但是替换我的字符串的一个(略有不同但相关的)部分。

我可以用逗号+空格替换每个逗号,但这更受控制,不太可能做出我不需要的更改....

例如:

原文:

Hello,World.

应该变成:

Hello, World.

但是:

Hello, World.

应保持为:

Hello, World.

目前,使用我的(坏)模式:

原文:

Hello,World

之后(错误):

Hello, orld

我实际上是在使用 Python 的 (2.6) 're' 模块。

【问题讨论】:

  • 请也提供您的正则表达式模式

标签: python regex match


【解决方案1】:

使用括号来捕获字符串的一部分是一种方法。另一种可能性是使用“前瞻断言”:

,(?=\S)

此模式匹配逗号仅当它后跟一个非空白字符。它不匹配逗号后面的任何内容,而是使用该信息来决定是否匹配逗号。

例如:

>>> re.sub(r",(?=\S)", ", ", "Hello,World! Hello, World!")
'Hello, World! Hello, World!'

【讨论】:

  • 感谢您 - 给出了这个公认的答案,作为对为什么这个机制起作用的额外解释非常感谢。干杯
【解决方案2】:

是的,使用括号来“捕获”与您的表达式匹配的部分字符串。我没有跟上 Python 的实现速度,但它应该为您提供某种名为 match[] 的数组,其元素对应于捕获。

【讨论】:

    【解决方案3】:

    是的,你可以。但是,在这种简单的情况下,您为什么要这样做?

    def insertspaceaftercomma(s):
        """inserts a space after every comma, then remove doubled whitespace after comma (if any)"""
        return s.replace(",",", ").replace(",  ",", ")
    

    似乎有效:

    >>> insertspaceaftercomma("Hello, World")
    'Hello, World'
    >>> insertspaceaftercomma("Hello,World")
    'Hello, World'
    >>> 
    

    【讨论】:

    • 是的,同意 - 对于这个简单的案例,但我的实际问题当然不止于此。不过谢谢!
    【解决方案4】:

    您可以查找逗号 + 非空格字符,然后在它们之间插入一个空格:

    re.sub(r',([^\s])', r', \1', string) 
    

    【讨论】:

      【解决方案5】:

      试试这个:

      import re
      
      s1 = 'Hello,World.'
      re.sub(r',([^\s])', ', \g<1>', s1)
      > Hello, World.
      
      s2 = 'Hello, World.'
      re.sub(r',([^\s])', ', \g<1>', s2)
      > Hello, World.
      

      【讨论】:

        猜你喜欢
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        相关资源
        最近更新 更多