我正在为我的系统使用约束文件,基本上我使用这一行来解析我的值:
能帮助我并指定此行的正则表达式。我希望能够检索四个关节的名称,包括minValue和maxValue。 谢谢!
答案 0 :(得分:0)
如果您只是想要一种从这种文本中解析变量位的方法,那很简单:
见这里:http://tinyurl.com/qjdaj9w
var exp = new Regex(@"angle\(Vector\((.*?),(.*?)\),Vector\((.*?),(.*?)\),(.*?),(.*?)\)");
var match = exp.Match("angle(Vector(JointA,jointB),Vector(JointA,jointB),minValue,maxValue)");
var jointA1 = match.Groups[0];
var jointB1 = match.Groups[1];
var jointA2 = match.Groups[2];
var jointB2 = match.Groups[3];
var max = match.Groups[4];
var min = match.Groups[5];
答案 1 :(得分:0)
提供您的基本文本就像您的样本一样简单,可以通过这个非常基本的正则表达式来完成,它可以捕获您的值。
angle[(]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)][,]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)]
鉴于这是使用正则表达式的无上下文语言可能不是最好的解决方案,因为有边缘情况会破坏正则表达式。
using System;
using System.Text.RegularExpressions;
namespace myapp
{
class Class1
{
static void Main(string[] args)
{
String sourcestring = "source string to match with pattern";
Regex re = new Regex(@"angle[(]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)][,]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)]",RegexOptions.IgnoreCase);
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
}
}
}
$matches Array:
(
[0] => Array
(
[0] => angle(Vector(JointA,jointB),Vector(JointA,jointB)
)
[1] => Array
(
[0] => JointA
)
[2] => Array
(
[0] => jointB
)
[3] => Array
(
[0] => JointA
)
[4] => Array
(
[0] => jointB
)
)