2013-10-29 68 views
2

編輯:解決方案通過@Heinzi https://stackoverflow.com/a/1731641/87698C#正則表達式,引用字符串中提取字符串


我有兩個字符串,例如someText-test-stringSomeMoreText?和某種像這樣的{0}test-string{1}?模式字符串。

我想從第一個字符串中提取匹配第二個字符串中佔位符位置的子字符串。

得到的子串應該是:someText-SomeMoreText

我試圖用Regex.Split("someText-test-stringSomeMoreText?", "[.]*test-string[.]*\?"來提取。但是這不起作用。你有

我希望有人有另外的想法...

+2

爲什麼而不是'Regex.Split(input,「test-string」)' – Anirudha

+1

框架中沒有內置任何東西,但有人已經實現了算法有權這樣做:http://stackoverflow.com/a/1731641/87698 – Heinzi

+0

可能重複的[解析格式化字符串](http://stackoverflow.com/questions/1410012/parsing-formatted-string) – Heinzi

回答

0

一種選擇是使用命名組:

(?<prefix>.*)test-string(?<suffix>.*)\? 

這將返回2組包含想要的前綴和後綴。

var match = Regex.Match("someText-test-stringSomeMoreText?", 
    @"(?<prefix>.*)test-string(?<suffix>.*)\?"); 
Console.WriteLine(match.Groups["prefix"]); 
Console.WriteLine(match.Groups["suffix"]); 
+0

問題是,這兩個輸入字符串是完全可變的。例如,第二個字符串也可能看起來像是「{0} test {1} stringSome {2} Text?'。問題是,我正在尋找一種方法來從這個僞模式字符串dynamicaly創建一個工作正則表達式模式。 – Matthias

0

我得到了一個解決方案,至少有點動態。

首先我分裂模式串{0}test-string{1}?string[] patternElements = Regex.Split(inputPattern, @"(\\\{[a-zA-Z0-9]*\})");

然後我吐了輸入字符串someText-test-stringSomeMoreText?string[] inputElements = inputString.Split(patternElements, StringSplitOptions.RemoveEmptyEntries);

現在inputElements是對應於佔位符文件{0},{1},...