2013-12-20 269 views
3

我認爲最好的方法是使用正則表達式,但我不知道該怎麼做。我試圖解析一個字符串,並在字母和標點符號之間加一個空格。我想一起保留標點符號。作爲一個例子,如果我有字符串python正則表達式插入標點符號和字母之間的空格

「是的!!!」

我想結束於

「是」,「!!!」。

如果我有串

!!! N00bs,

我想

落得 「!!!」, 「N00bs」

這可能嗎?做這個的最好方式是什麼?現在我正在分析每封信,這是一個愚蠢的做法。

感謝您的幫助。

+0

我知道你說你只是想帶出標點,但以防萬一你想這樣做,也想一次去掉其他非字母數字字符,例如(@#$%^&*(()<> + =)或者其他什麼,你可以使用'\ w'和'\ W'。這很好。如果您使用的是Python 3.x,它會自動執行Unicode字符。 – Shule

回答

9

是這樣的:

txt = re.sub(r'([a-zA-Z])([,.!])', r'\1 \2', '!!!this, .is, .a .test!!!') 

可以切換爲了讓其他的方向

re.sub(r'([,.!])([a-zA-Z])', r'\1 \2', txt) 

或許你也可以讓它在一個正則表達式的工作,以及

+0

這幾乎就在那裏。如果標點符號在你改變「!is」之前所做的那樣,它似乎不起作用。我試圖在標點符號和字母字符之間獲得空格 –

+0

我改變了它,因爲我不知道你是否想要這種情況。我會編輯我的答案。 –

+0

謝謝,這完全是因爲我不明確。 –

0

如果你只是想要添加一個空間也許使用替換?

x = x.replace('!',' ') 

您可能不得不使用更多的替換來刪除標點符號和標點之間的空格。

0

我會使用:

(.+)\b(.+) 

它同時適用於yes!!!!!!N00bs

說明:

The regular expression: 

(?-imsx:(.+)\b(.+)) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    .+      any character except \n (1 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) and 
          something that is not a word char 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
    .+      any character except \n (1 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
)      end of \2 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
相關問題