2014-01-13 139 views
0

我需要由線被分開線執行以下操作:正則表達式分開單詞

實施例:

word "multiple set" another word L&D "another set" 

輸出:

word 
multiple set 
another 
word 
L&D 
another set 
我目前使用

(?<match>\w+)|\""(?<match>[\w\s]*) 

但它不適用於安培rsand(&)

謝謝!

+0

using C#a那麼現在 –

+2

......那麼你爲什麼不使用'\ S'而不是單詞字符呢?我不知道爲什麼你會期望「字符」匹配&符號... – Doorknob

+0

你試過逃避&符號嗎? –

回答

1

嘗試:"(.*?)"|(\S+)

這將懶洋洋地在引號OR任何一套非whitepace字符之間的匹配任何字符。

示例here。根據不同的語言,您可能需要避開雙引號(\"(.*?)\")。

像@abiessu提到的那樣,您可以使用更具體的([^"]*)選擇器替換懶惰選擇器(.*?)。延遲選擇器將選擇所有內容,直到選擇器之後的第一個字符(以下"),其中更具體的([^"]*)將選擇除"之外的所有內容。不確定延遲選擇器與字符類型之間是否存在性能差異,但是它取決於您。

+1

我更喜歡''[^」] *「'更好...... – abiessu

+0

增加了選項@ abiessu。 – Sam

+1

這工作!謝謝 –

0

如果您傳遞給Regex.Split的模式包含捕獲組,則捕獲的文本將包含在結果集中。例如:

var input = "word \"multiple set\" another word L&D \"another set\""; 
var output = Regex.Split(input, "\"([^\"]*)\"|\\s"); 

產生一個結果集是這樣的:

"word" 
"" 
"multiple set" 
"" 
"another" 
"word" 
"L&D" 
"" 
"another set" 
"" 

現在,如果你只是刪除空元素(一個小的LINQ可以在這裏很有用):

var output = Regex.Split(input, "\"([^\"]*)\"|\\s").Where(x => x.Length > 0); 

產生如下結果集:

"word" 
"multiple set" 
"another" 
"word" 
"L&D" 
"another set"