2012-10-12 78 views
1

我值狀正則表達式:選擇空間,如果空間存在

\w{1,2}-\w{1,2}\d{1,4} and \w{1,2}-\w{1,2} \d{1,4} 

我把這些值:

AB-CD 1 -> AB-CD1 
AB-CD1 -> AB-CD1 

我這樣做是使用

[ ]{1}[\d]{1} 

和更換 「」 到「 」。這很好。

但現在我需要做下面的轉換:

AB-CD1 -> AB-CD 1 
AB-CD 1 -> AB-CD 1 

我試圖前瞻瞄準任何數字

(?=\d) 

但後來我得到兩個空間,如果我的文字已經包含一個。我需要選擇\ w和\ d之間的空格(或不填) - 我該怎麼做?

+0

這是什麼語言? (我問,因爲許多類型的正則表達式支持向後看,'(?<!)',而很多人不這樣做。) – ruakh

+0

另外:我希望你知道'\ w'匹配數字(不只是字母和下劃線), '[\ d]'相當於'\ d',並且'{1}'是多餘的? – ruakh

+0

這是C#方言。是的,它可能是多餘的,但我發現更可讀。 – UNeverNo

回答

1

你可以寫:

(?<![\d ]) ?(?=\d) 

匹配的可選空間(即空格或空字符串)位置,做跟着一個數字或空間,確實前面一個數字。

(?<!...)負向後斷言;見http://www.regular-expressions.info/lookaround.html。)

+0

如果字符和數字之間沒有空格,我想選擇空格或空字符串。 – UNeverNo

+0

@UNeverNo:我已經更新了我的答案。 – ruakh

+0

感謝這有助於很多。 – UNeverNo

0

您可以使用替代([^\d ])(?=\d)「\ 1」

0

不知道C#..但你可以嘗試更換:

([a-zA-Z])([0-9]+) 

\1 \2

小用sed測試:

kent$ echo "AB-CD1"|sed -r 's/([a-zA-Z])([0-9]+)/\1 \2/g' 
AB-CD 1