如何在.NET中使用正则表达式匹配封闭子字符串

时间:2011-06-10 22:16:35

标签: c# regex f#

我正在尝试匹配*中的id=resultsStats>*<nobr>来提取中间位。 这将匹配例如 id=resultsStats>3<nobr> id=resultsStats>anything<nobr>

所以我可以提取中间的“3”或“任何东西” 我如何在.NET正则表达式中执行此操作?

4 个答案:

答案 0 :(得分:3)

(?<=id=resultsStats>).+?(?=<nobr>)

如果内容是可选的而非必需的,请使用*代替+

使用示例(F#):

open System.Text.RegularExpressions

let tryFindResultsStats input =
    let m = Regex.Match (input,
                         "(?<=id=resultsStats>).+?(?=<nobr>)",
                         RegexOptions.Singleline)
    if m.Success then Some m.Value else None

答案 1 :(得分:0)

我不是正则表达式专家,但这样的事情可能有用:

@"\>\*{1}\<"

这意味着“匹配lt / gt字符之间的单个星号”。您只需要确保转义星号,因为它在正则表达式中具有特殊含义。

希望这有帮助!

答案 2 :(得分:0)

如果您想要捕获*,那么您需要使用反斜杠来逃避它。请注意,如果您在字符串中执行此操作,则最安全的做法是转义反斜杠(尽管技术上\*无效并且可以正常工作)

"\\*"

答案 3 :(得分:0)

试试这个:

using System;
using System.Text.RegularExpressions;

namespace SO6312611
{
    class Program
    {
        static void Main()
        {
            string input = "id=resultsStats>anything<nobr>";
            Regex r = new Regex("id=resultsStats>(?<data>[^<]*)<nobr>");
            Match m = r.Match(input);
            Console.WriteLine("Matched: >{0}<", m.Groups["data"]);
        }
    }
}