Есть идеи, почему это не работает? C # - PullRequest
0 голосов
/ 22 февраля 2009
public class MyExample
{

    public static void Main(String[] args)
    {


string input = "<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&amp;show_name_exact=true\">The Venture Bros</a></p></li>";


    // Call Regex.Match
    Match m = Regex.Match(input, "/show_name=(.*?)&amp;show_name_exact=true\">(.*?)</i");

   // Check Match instance
    if (m.Success)
    {
        // Get Group value
        string key = m.Groups[1].Value;
        Console.WriteLine(key);
        // alternate-1
    }



    }

Я хочу, чтобы "Venture Bros" выводился (в этом примере).

Ответы [ 7 ]

2 голосов
/ 22 февраля 2009

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

string input = "<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&amp;show_name_exact=true\">The Venture Bros</a></p></li>";

// Call Regex.Match
Match m = Regex.Match(input, "show_name=(.*?)&amp;show_name_exact=true\">(.*?)</a");

// Check Match instance
if (m.Success)
{
    // Get Group value
    string key = m.Groups[2].Value;
    Console.WriteLine(key);
    // alternate-1
}
2 голосов
/ 22 февраля 2009

Я думаю, это потому, что вы пытаетесь сделать перл-слэш в передней и в конце. Несколько других ответчиков были смущены этим уже. Так, как он это написал, он пытается сделать регистронезависимым, начиная и заканчивая / и заканчивая символом i в конце, как вы это делаете в perl.

Но я почти уверен, что регулярные выражения .NET не работают таким образом, и это является причиной проблемы.

Редактировать: чтобы быть более конкретным, посмотрите на RegexOptions, пример, который я извлек из MSDN, выглядит так:

Dim rx As New Regex("\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled Or RegexOptions.IgnoreCase)

Ключом здесь является "RegexOptions.IgnoreCase", который вызовет эффект, который вы пытались использовать с /pattern/i.

.
1 голос
/ 22 февраля 2009

/? SHOW_NAME = (. ) & show_name_exact = истина \ "> (. )

будет работать так, как вы ожидаете, я верю. Но я заметил еще одну вещь: вы пытаетесь получить значение group [1], но я считаю, что вы хотите получить значение group [2], потому что будет 3 группы, первая - это совпадение вторая первая группа ...

Gl;)

1 голос
/ 22 февраля 2009

Правильное регулярное выражение в вашем случае будет

^.*&amp;show_name_exact=true\"\>(.*)</a></p></li>$

regexp сложно, но на http://www.regular -expressions.info / вы можете найти отличный учебник

1 голос
/ 22 февраля 2009

Из-за вопросительного знака перед show_name. Он находится на входе, но не в шаблоне, поэтому не совпадает.

Также вы пытаетесь сопоставить </i, но вход не содержит этого (он содержит </li>).

0 голосов
/ 29 мая 2009

Хорошо, давайте разберемся с этим.

Данные испытаний: "<a href=\"http://tvrss.net/search/?show_name=The+Venture+Bros&amp;show_name_exact=true\">The Venture Bros</a></p></li>"

Оригинальное регулярное выражение: "/show_name=(.*?)&amp;show_name_exact=true\">(.*?)</i"

Рабочее регулярное выражение: "/\?show_name=(.*)&amp;show_name_exact=true\">(.*)</a"

Мы начнем слева и продолжим наш путь через право через регулярное выражение.

  1. "?" стал "\?" это потому что "?" означает, что предыдущий символ или группа является необязательным. Когда перед ним ставится косая черта, теперь он соответствует буквальному вопросительному знаку.

  2. "(.*?)" стал "(.*)", круглые скобки обозначают группу, а вопросительный знак означает «необязательный», но «*» уже означает «0 или более», так что на самом деле это просто удаление избыточности.

  3. "</i" стал "</a" это изменение было сделано, чтобы соответствовать вашему фактическому тексту, который завершает привязку тегом "</a>".

Рекомендуемое регулярное выражение: "[\\W]show_name=([^><\"]*)&amp;show_name_exact=true\">([^<]*)<"

(дополнительные были добавлены для обеспечения правильного экранирования строки c #.)

Хорошим инструментом для проверки регулярных выражений в c # является regex-freetool на code.google.com

0 голосов
/ 22 февраля 2009

Сначала регулярное выражение начинает "/ show_name", но целевая строка имеет "/? Show_name", поэтому первая группа не будет хотеть первого ожидаемого попадания.

Это приведет к сбою всего регулярного выражения.

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