2012-04-19 22 views
1

我需要在文本中執行搜索/替換,其中包含空格後面沒有後跟的逗號,以更改爲逗號+空格。「ReplaceWith」& - 但只是其中的一部分

所以我能找到這樣使用:

,[^\s] 

但我與更換掙扎;我不能只用:

, (space, comma) 

或者

& , 

隨着比賽的最初匹配兩個字符。

有沒有辦法說'&' - 1?或'& [0]'或其他意思; '匹配的字符串,但只有部分'在替換參數?

試圖問這個另一種方式:

  1. 我可以使用正則表達式來我的字符串的一部分。
  2. 但替換我的字符串(略有不同但相關)的一部分。

我可能只是可能更換一個逗號+空格逗號每一個,但是這是一個多一點控制,不太可能做出改變,我不需要....

例如:

原文:

Hello,World. 

應該改爲:

Hello, World. 

但是:

Hello, World

應保持原樣:

Hello, World. 

而目前,用我的(壞)模式,我有:

原文:

Hello,World 

後(錯誤):

Hello, orld 

我實際上使用Python (2.6)'re'模塊,因爲它發生了。

+0

請給出你的正則表達式 – hjpotter92 2012-04-19 17:05:12

回答

2

使用括號來捕捉字符串的一部分就是做這件事。另一種可能性是使用「前向斷言」:

,(?=\S) 

這種模式逗號匹配只有它後面跟着一個非空白字符。它不匹配任何後跟逗號,但使用該信息來決定是否匹配逗號。

例如:

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

感謝你 - 給了這個接受的答案,作爲該機制爲什麼這個機制的額外解釋非常感謝。乾杯 – monojohnny 2012-04-24 13:00:35

1

是的,使用圓括號來「捕捉」與你的表達式匹配的部分字符串。我不太瞭解Python的實現,但它應該給你一些名爲match []的數組,它的元素對應於捕獲。

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

是的,同意 - 對於這個簡單的情況,但當然我的實際問題涉及多於th是。雖然謝謝! – monojohnny 2012-04-24 12:22:37

1

你可以找一個逗號+非空格字符,然後粘在它們之間的空間:

re.sub(r',([^\s])', r', \1', string) 
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. 
相關問題