Как сопоставить вложенную подстроку с помощью регулярных выражений в .NET - PullRequest
0 голосов
/ 11 июня 2011

Я пытаюсь сопоставить * в id=resultsStats>*<nobr>, чтобы извлечь средний бит. Это будет соответствовать, например, id=resultsStats>3<nobr> id=resultsStats>anything<nobr>

так что я могу извлечь середину "3" или "что-нибудь" Как мне сделать это в .NET регулярных выражений или иным образом?

Ответы [ 4 ]

3 голосов
/ 11 июня 2011
(?<=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
0 голосов
/ 11 июня 2011

Попробуйте это:

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"]);
        }
    }
}
0 голосов
/ 11 июня 2011

Если вы хотите захватить *, то вам нужно избежать его с обратной косой чертой.Обратите внимание, что если вы делаете это внутри строки, безопаснее всего избежать обратной косой черты (хотя технически \* недопустимо и будет работать)

"\\*"
0 голосов
/ 11 июня 2011

Я не эксперт по регулярным выражениям, но что-то вроде этого может сработать:

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

Это означает «сопоставить одну звездочку между символами lt / gt». Вам просто нужно убедиться, что вы не указали звездочку, поскольку она имеет особое значение в регулярных выражениях.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...