2012-06-28 103 views
0

我不熟悉正則表達式。一個簡單的正則表達式

對於字符串,我想用空格替換所有非字母和非數字字符,然後合併這些空格,以便沒有兩個連續的空格。

如何實現使用正則表達式?

+0

你必須使用正則表達式呢?它可以沒有他們,也許更容易理解... – Sterling

+2

英鎊,我懷疑一個非正則表達式版本會更清晰。 – Joey

回答

2

使用兩置換:

  1. 用空格代替[^a-zA-Z0-9]
  2. 用一個空格替換[ ]{2,}(這裏只需要角色職業,因爲有解析器弄亂 - 通常是空間已足夠自身)

在PowerShell中那簡直像

$s -replace '[^a-zA-Z0-9]', ' ' -replace ' {2,}', ' ' 
0

聽起來像你需要自己

replace(mystring, "[^a-zA-Z0-9]+", " "); 
+1

是不是'\ a'類似於一個'鈴鐺字符'?相當令人誤解! – Cylian

+0

oops我的意思是'^',現在修復。 –

2

您將需要2次

更換

[^a-zA-Z0-9] 

1空間

更換

[ ]{2,} 

隨着1空間

0

不知道有關與單一的正則表達式這樣做,而是兩個似乎做的伎倆

echo -n 'dog*&$\@$ cat On1 tw0' | 
    perl -pe 's/([^([:alnum:])]|\s)/ /g' | 
     perl -pe 's/\s+/ /g' 

輸出 = dog cat On1 tw0