创建特定句子的正则表达式

时间:2013-05-21 15:33:27

标签: c# regex regular-language

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

角度(向量(JointA,jointB),向量(JointA,jointB),minValue(最小值),包括maxValue)

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

2 个答案:

答案 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[)]

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

enter image description here

声明

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

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
        )

)