-5

我正在为我的系统使用一个约束文件,基本上我正在使用这一行来解析我的值:

角度(向量(关节 A,关节 B),向量(关节 A,关节 B),最小值,最大值)

你能帮我指定这一行的正则表达式吗?我希望能够检索四个关节的名称,包括 minValue 和 maxValue。谢谢!

4

2 回答 2

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];
于 2013-05-21T15:46:11.050 回答
0

描述

提供您的基本文本就像您的示例一样简单,它可以使用这个非常基本的正则表达式来完成,它可以捕获您的值。

angle[(]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)][,]Vector[(]\b([^,]*)\b[,]\b([^)]*)\b[)]

  • 第 0 组将获得整个匹配的字符串
  • 1-4 将具有请求的联合值

在此处输入图像描述

免责声明

鉴于这是使用正则表达式的上下文无关语言可能不是最好的解决方案,因为存在会破坏正则表达式的边缘情况。

C# 代码示例:

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
        )

)
于 2013-05-21T15:49:32.823 回答