2014-12-23 48 views
2

試圖學習更多關於使用正則表達式(正則表達式)。使用微軟的正則表達式在C#(VS 2010)的版本,我怎麼可能拿一個簡單的字符串,如:如何使用正則表達式插入字符之間的空格?

"Hello" 

,並更改爲

"H e l l o" 

這可能是任何字母或符號的字符串,大寫字母,小寫字母等,並且沒有其他字母或符號跟隨或引導這個詞。 (該字符串只包含一個單詞)。

(我已閱讀其他帖子,但我似乎無法掌握正則表達式,請親切:))。

感謝您的任何幫助。 (解釋將是最有用的)。

回答

4

你可以通過正則表達式來完成,不需要內置的c#函數。 使用下面的正則表達式,然後用空格替換匹配的邊界。

(?<=.)(?!$) 

DEMO

string result = Regex.Replace(yourString, @"(?<=.)(?!$)", " "); 

說明:

  • (?<=.)正回顧後發斷言,這場比賽必須由一個字符開頭。
  • (?!$)否定性超前,它聲明該匹配不會跟着行錨的結尾。因此,所有字符旁邊的邊界將被匹配,但不是最後一個字符旁邊的邊界。

OR

你也可以使用單詞邊界。

(?<!^)(\B|b)(?!$) 

DEMO

string result = Regex.Replace(yourString, @"(?<!^)(\B|b)(?!$)", " "); 

說明:

  • (?<!^)負回顧後,其斷言,這場比賽將不會在啓動。
  • (\B|\b)匹配存在於兩個單詞字符和兩個非單詞字符(\B)之間的邊界或匹配存在於單詞字符和非單詞字符(\b)之間的邊界。
  • (?!$)負前瞻斷言該匹配不會跟着行錨的結尾。
+0

你能解釋一下語法請:

對於發燒友來說,同樣的效果可以通過LINQ使用此一班輪實現?謝謝。 –

+0

@Raj謝謝。所有的答案都很好,但我正在尋找一個純粹的Regex聲明。任何想法爲什麼downvote上一個學習的問題:(? –

+0

我不知道你的問題有什麼問題,但你必須顯示你的企圖。 –

1

這很簡單。爲了匹配任何字符使用.點,然後用該字符替換一個額外的空間沿

這裏圓括號(...)用於能夠通過$index

訪問查找分組內容:"(.)"

Repalce與"$1 "

DEMO

+1

那麼如何這個看起來在最後的聲明?謝謝。 –

+0

有很多修飾符與正則表達式模式一起使用,例如'm'用於多行,'i'用於不區分大小寫,'g'用於全局(全部匹配)等。這是*語言特定*。[閱讀全文...](http://msdn.microsoft.com/en-us/library/yd1hzczs%28v=vs.110%29.aspx) – Braj

5
Regex.Replace("Hello", "(.)", "$1 ").TrimEnd(); 

說明

  • 點字符類的字符串 「Hello」 的每一個字符匹配。
  • 圍繞點字符的假名是必需的,以便我們可以通過$n表示法來引用捕獲的字符。
  • 將每個捕獲的字符替換爲替換字符串。我們的替換字符串是「$ 1」(注意最後的空格)。這裏$1表示輸入中的第一個捕獲組,因此我們的替換字符串將用該字符替換每個字符加上一個空格。
  • 該技巧將在最後一個字符「o」後面添加一個空格,所以我們稱TrimEnd()將其刪除。

A demo can be seen here

String.Join(" ", YourString.Select(c => c)) 
相關問題