2012-06-28 101 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