2014-05-22 55 views
1

我試圖捕獲數組內部的每個單詞,並且我還想捕獲每個不是的單詞(基本上是將字符串分開通過我擁有的詞彙和我沒有的詞彙)。匹配並捕獲列表中的每個單詞以及這些單詞之間的含義

爲了清楚起見,這裏是一個例子:

輸入:

串的myString = 「ID-NUMthatissomeboringstuffNAME」

串[] wordsList =新的字符串[] { 「ID」 ,「NUM」,「NAME」};

希望的輸出捕獲(按順序):

(ID)

( - )

(NUM)

(thatissomeboringstuff)

(NAME)

我的正則表達式:

string regex = String.Format("(({0})|.*)", String.Join("|", rules)) 

當然這是行不通的,當我試圖取代,它只是給我抓的第一個字母。

再一次,我原來的問題已經解決了(我只是想分析這樣一個字符串,並把一些價值取決於我在裏面發現......區區Replace就夠了:P),但對於爲了完整性,我想用這種方法解決它。

+0

所以,你要匹配CAPS的東西,東西在其間的CAPS東西?你有什麼嘗試? –

+0

@MattBurland哦,忘了是啊。我想要匹配所有,確實如此。 – Kilazur

+0

@閉門器請解釋。我如何澄清我不知道的錯誤? – Kilazur

回答

2

這應該這樣做({0}|[^({0})]+)。這是Regexr breakdown

代碼

var input = "ID-NUMthatissomeboringstuffNAME"; 

string[] wordsList = new string[] { "ID", "NUM", "NAME" }; 
string regex = String.Format("({0}|[^({0})]+)", String.Join("|", wordsList)); 

foreach(var match in Regex.Matches(input, regex) 
          .OfType<Match>() 
          .Select(match => match.Captures[0].Value)){ 
    Console.WriteLine(match); 
} 
+0

簡單,優雅,對我來說很好:p – Kilazur

0
indexOf(string) 

給你字符串的位置,你可以使用

substring(indexStart, word length) 

得到它

+2

我認爲他的意思是使用正則表達式。正如他所說的,一個簡單的替換就可以完成工作 – cr0ss

+0

就是這樣,但無論如何感謝輸入。 – Kilazur

0

我不知道這是更具可讀性,但你可以使用這個表達式:

@"(?<g0>[A-Z]*)(?<g1>[^A-Z]*)(?<g2>[A-Z]*)(?<g3>[^A-Z]*)(?<g4>[A-Z]*)"

它你發現了什麼,發現GROU ps的大寫字母,然後是非大寫字母等,並將它們存儲在命名組中。

+0

嗯,我可能還不清楚,大寫的單詞就是這裏的例子。最後它們可能不是大寫字母。 – Kilazur

相關問題