Что не так с этим регулярным выражением? - PullRequest
0 голосов
/ 19 июня 2010

Я новичок и у меня есть некоторые проблемы с регулярным выражением.

Вводимый текст: что-то idUser = 123654; nick = "Tom" что-то

Мне нужно извлечь значение idUser -> 123456

Я пытаюсь это:

//idUser is already 8 digits number
        MatchCollection matchsID = Regex.Matches(pk.html, @"\bidUser=(\w{8})\b");
        Text = matchsID[1].Value;

но на выходе я получаю idUser = 123654, мне нужен только номер

Вторая проблема связана с nick = "Tom", как я могу получить только текст Tom из этого выражения.

Ответы [ 4 ]

1 голос
/ 19 июня 2010

вы не показываете свой выходной код, где вы получаете группу из вашей коллекции совпадений.

Подсказка: вам понадобится группа 1, а не группа 0, если вы хотите иметь только то, что находится в скобках.

0 голосов
/ 19 июня 2010

Используйте Осмотр

(?<=idUser=)\d{1,8}(?=(;|$))

Чтобы установить длину цифр до 6, используйте (?<=idUser=)\d{6}(?=($|;))

0 голосов
/ 19 июня 2010

Вот шаблон, который должен работать:

\bidUser=(\d{3,8})\b|\bnick="(\w+)"

С учетом входной строки:

something idUser=123654; nick="Tom" something

Это дает 2 совпадения (, как видно на rubular.com ):

  • Первое совпадение User=123654, захват группы 1 123654
  • Второе совпадение nick="Tom", захват 2 группы Tom

Некоторые варианты:

  • В регулярных выражениях .NET вы также можете использовать именованные группы для лучшей читаемости.
  • Если nick всегда появляется после idUser, вы можете сопоставитьдва сразу вместо чередования, как указано выше.
  • Я использовал {3,8} повторение, чтобы показать, как сопоставить не менее 3 и не более 8 цифр.

API ссылки

  • Match.Groups свойство
    • Таким образом вы получаете, какие отдельные группы захвачены в матче
0 голосов
/ 19 июня 2010
.*?idUser=([0-9]+).*?

Это регулярное выражение должно работать для вас: o)

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