1

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

所以我可以使用以下方法找到它:

,[^\s]

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

 , (space, comma)

或者

& ,

由于匹配最初匹配两个字符。

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

尝试询问此问题的另一种方法:

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

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

例如:

原来的:

Hello,World.

应该变成:

Hello, World.

但:

Hello, World.

应保持为:

Hello, World.

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

原来的:

Hello,World

之后(错误):

Hello, orld

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

4

5 回答 5

2

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

,(?=\S)

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

例如:

>>> re.sub(r",(?=\S)", ", ", "Hello,World! Hello, World!")
'Hello, World! Hello, World!'
于 2012-04-19T17:09:39.260 回答
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'
>>> 
于 2012-04-19T17:09:22.967 回答
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.
于 2012-04-19T19:10:49.493 回答
1

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

re.sub(r',([^\s])', r', \1', string) 
于 2012-04-19T17:57:09.073 回答
1

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

于 2012-04-19T17:03:13.907 回答