代码之家  ›  专栏  ›  技术社区  ›  Sebastien Robert

C#正则表达式需要帮助

  •  2
  • Sebastien Robert  · 技术社区  · 15 年前

    我试图用正则表达式在字符串变量中查找搜索词的一部分。

    以下是字符串变量内容:

    string s_Var = "[ Object[Key='o_Module.Id'].Text ]"
    

    [,],','和。总是在那里,但不是Key=,Object和Text。(可能不同)。我想确定“和”like“o_Module.Id”之间的部分

    我只想扮演“和”之间的角色

    你能帮我确定我需要的样式吗?

    示例:

    string s_Original_Text = "[ Object[Key='o_Module.Id'].Text ]"
    

    ? =我不知道值可以是

    [ ?[?“o”模块。?].? ]

    4 回复  |  直到 15 年前
        1
  •  1
  •   TheVillageIdiot    15 年前

    请尝试以下代码:

    var s = "[['o_Module.Id'].Text]"; 
    //"[Object[Key='o_Module.Id'].Text]"; //ALSO MATCHES THIS
    var r = new System.Text.RegularExpressions.Regex(@"(\[?.*\[?')(.*)('.*)");
    var m = r.Match(s);
    if (m.Success)
    {
        //0 contains whole string
        Console.WriteLine(m.Groups[2].Value); //Prints o_Module.Id
    }
    
        2
  •  3
  •   Ed Swangren    15 年前

    如果单引号总是以上面显示的形式出现,为什么不直接查找“using SubString”的第一个索引?我在你的描述中看到,使用正则表达式有点过头了。

        3
  •  0
  •   Rohan Singh    15 年前
    \[[^']*?'([^']+)
    

    o_Module.id值将位于第一个捕获组中。

        4
  •  0
  •   Reinderien    15 年前

    我认为,假设只有一组单引号,通常应该这样做:

    System.Text.RegularExpressions.Match result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", "'([^']*)'");
    

    如果要添加可选内容:

    result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", @"\[ (?:Object)?\[(?:Key=)?'([^']*)'\]\.(?:Text)? \]");