【问题标题】:Regex Find matched String from last正则表达式从最后一个查找匹配的字符串
【发布时间】:2014-11-19 04:59:05
【问题描述】:

我有以下字符串

Copy(objid1,objid2)

我正在使用以下正则表达式进行匹配

objid(?<id>\d{0,3})

但是我看输出objid2,这个正则表达式返回objid1

我会做任何改变来找到我想要的输出。 我以为我会返回所有匹配的子字符串,但只返回第一个但是我只需要最后一个匹配的子字符串。

我不想使用任何子字符串函数,因为我不知道要找到的确切长度。

提前致谢。

编辑:

请看我的尝试。

Match output = Regex.Match("Copy(objid1,objid2)", @".*(objid(?<id>\d{0,3}))", RegexOptions.Singleline | RegexOptions.IgnoreCase); //objid(?<id>\d{0,3})

                    if (output.Success)
                    {
                        String ProcessString = ((System.Text.RegularExpressions.Capture)(output.Groups[0])).Value;//output.Value;
    }

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    在您提到的模式之前放置一个.*,以便获得最后一个匹配项。

    @".*(objid(?<id>\d{0,3}))"
    

    DEMO

    从组索引 1 中获取你想要的字符串。

    要获得多行字符串中的最后一个匹配项,您需要启用 DOTALL 修饰符。

    (?s).*(objid(?<id>\d{0,3}))
    

    DEMO

    【讨论】:

    • 这会返回 String Copy(objid1,objid2 not objid2
    • 打印组索引 1 而不是索引 0。
    • 即把Groups[0]改成Groups[1]
    【解决方案2】:
    ,objid(?<id>\d{0,3})(?![^,)]*,)
    

    试试这个。查看演示。

    http://regex101.com/r/lZ5mN8/26

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多