我正在寻找一种方法,用C ++ .NET在正则表达式中为模式赋值
之类的东西String^ speed;
String^ size;
“命令SPEED = [speed] SIZE = [size]”
现在我正在使用IndexOf()和Substring(),但它非常难看
答案 0 :(得分: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");
语法错误道歉,我现在没有编译器可以测试。
答案 1 :(得分: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中,这些必须用数字引用,但在其他一些语言中,你可以按名称引用它们。
答案 2 :(得分:0)
如果将所有变量放在一个类中,则可以使用反射来迭代其字段,获取其名称和值并将它们插入字符串中。
给定一个名为InputArgs的类的实例:
foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
string = Regex.replace("\\[" + f.Name + "\\]",
f.GetValue(InputArgs).ToString());
}