2008-09-19 34 views
3

我正在尋找與在正則表達式與圖案分配變量的方法C++ .NET 類似使用正則表達式分配變量

String^ speed; 
String^ size; 

「命令SPEED = [SPEED] SIZE = [大小] 「

現在,我使用的IndexOf()和子串(),但它是很醜陋

回答

3
String^ speed; String^ size; 
Match m; 
Regex theregex = new Regex (
    "SPEED=(?<speed>(.*?)) SIZE=(?<size>(.*?)) ", 
    RegexOptions::ExplicitCapture); 
m = theregex.Match (yourinputstring); 
if (m.Success) 
{ 
    if (m.Groups["speed"].Success) 
    speed = m.Groups["speed"].Value; 
    if (m.Groups["size"].Success) 
    size = m.Groups["size"].Value; 
} 
else 
    throw new FormatException ("Input options not recognized"); 

道歉,我沒有編譯器現在進行測試。

0

如果你把所有的變量在一個類中,你可以使用反射來遍歷它的領域,讓他們的名字並將其值插入一個字符串中。

鑑於一些類名爲InputArgs的一個實例:語法錯誤

foreach (FieldInfo f in typeof(InputArgs).GetFields()) { 
    string = Regex.replace("\\[" + f.Name + "\\]", 
     f.GetValue(InputArgs).ToString()); 
} 
2

如果我正確理解你的問題,你正在尋找捕獲組。我不熟悉的.NET API,但在Java中,這將是這個樣子:

Pattern pattern = Pattern.compile("command SPEED=(\d+) SIZE=(\d+)"); 
Matcher matcher = pattern.matcher(inputStr); 
if (matcher.find()) { 
    speed = matcher.group(1); 
    size = matcher.group(2); 
} 

有兩個捕獲組在上述正則表達式模式,由兩套括號中指定。在Java中,這些必須用數字引用,但在某些其他語言中,可以通過名稱引用它們。

相關問題