我需要对包含逗号后面跟空格的文本执行搜索/替换,以更改为逗号+空格。
所以我可以使用:
找到它,[^\s]
但我正在努力替换;我不能只使用:
, (space, comma)
或者
& ,
因为匹配最初匹配两个字符。
有没有办法说'&' - 1?或'& [0]'或其他意思;替换参数中的'匹配字符串,但只是其中的一部分?
另一种试图问这个问题的方法:
我可能只是用逗号+空格替换每个逗号,但这是一个更有控制力,不太可能做出我不需要的改变....
例如:
原件:
Hello,World.
应该成为:
Hello, World.
但是:
Hello, World
。
应保持为:
Hello, World.
目前,我使用我的(坏)模式:
原件:
Hello,World
之后(错误):
Hello, orld
我实际上正在使用Python的(2.6)'re'模块。
答案 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.