“ReplaceWith”& - 但只是其中的一部分

时间:2012-04-19 16:59:06

标签: python regex match

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

所以我可以使用:

找到它
,[^\s]

但我正在努力替换;我不能只使用:

 , (space, comma)

或者

& ,

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

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

另一种试图问这个问题的方法:

  1. 我可以使用正则表达式识别字符串的一部分。
  2. 但是我的字符串中有一个(略有不同但相关)的部分。
  3. 我可能只是用逗号+空格替换每个逗号,但这是一个更有控制力,不太可能做出我不需要的改变....

    例如:

    原件:

    Hello,World.
    

    应该成为:

    Hello, World.
    

    但是:

    Hello, World

    应保持为:

    Hello, World.
    

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

    原件:

    Hello,World
    

    之后(错误):

    Hello, orld
    

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

5 个答案:

答案 0 :(得分:2)

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

,(?=\S)

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

例如:

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

答案 1 :(得分:1)

是的,使用括号“捕获”与您的表达式匹配的字符串的一部分。我不太擅长Python的实现,但它应该给你一些名为match []的数组,其元素对应于捕获。

答案 2 :(得分:1)

是的,你可以。但是,在这个简单的案例中,你为什么要这样做?

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'
>>> 

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

试试这个:

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.