我正在尋找與在正則表達式與圖案分配變量的方法C++ .NET 類似使用正則表達式分配變量
String^ speed;
String^ size;
「命令SPEED = [SPEED] SIZE = [大小] 「
現在,我使用的IndexOf()和子串(),但它是很醜陋
我正在尋找與在正則表達式與圖案分配變量的方法C++ .NET 類似使用正則表達式分配變量
String^ speed;
String^ size;
「命令SPEED = [SPEED] SIZE = [大小] 「
現在,我使用的IndexOf()和子串(),但它是很醜陋
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");
道歉,我沒有編譯器現在進行測試。
如果你把所有的變量在一個類中,你可以使用反射來遍歷它的領域,讓他們的名字並將其值插入一個字符串中。
鑑於一些類名爲InputArgs的一個實例:語法錯誤
foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
string = Regex.replace("\\[" + f.Name + "\\]",
f.GetValue(InputArgs).ToString());
}
如果我正確理解你的問題,你正在尋找捕獲組。我不熟悉的.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中,這些必須用數字引用,但在某些其他語言中,可以通過名稱引用它們。