2017-01-19 6 views
-3

У меня есть этот patter p и вы хотите использовать этот шаблон, чтобы узнать, есть ли у него какие-либо соответствия. Это в Python.regex matching parsing

p = "keyword" + ".*?(\d+(\.\d+)?[\s%]?[\w/]*)" found = re.findall(p, some_text)

У меня есть проблемы при разборе это регулярное выражение.

  1. Что такое первый «?».

    Я понимаю, что «. *» Соответствует любой вещи в течение 0 или более раз. Но не знаете, что такое "?" здесь.

  2. Странно видеть скобку вложенной группы захвата. Что оно делает?

  3. Что такое "?" в [\s%]? regex? Я предполагаю, что это соответствует пробелу, а затем «%». Но не знаете, что такое "?" здесь.

  4. Что является звездочкой в ​​области [\w/]* regex? Я предполагаю, что это соответствует любому символу слова, за которым следует косая черта. Но не уверен, что делает «*».

+1

Возможный дубликат [Ссылка - что означает это регулярное выражение?] (Http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – MYGz

ответ

2
.*?(\d+(\.\d+)?[\s%]?[\w/]*) 
  1. .*? соответствует любому символу *? квантор (для терминаторов линии за исключением) - Матчи между нулем и неограниченное количество раз, а несколько раз, как это возможно, расширение по мере необходимости (ленивого)
  2. 1 Capturing Группа (\d+(\.\d+)?[\s%]?[\w/]*)
  3. \d+ соответствует цифре (соответствует [0-9]). Квантификатор - соответствует одному и неограниченному времени, столько раз, сколько возможно le, отдавая при необходимости (жадный)
  4. Вторая группа захвата (\.\d+)?
  5. \. соответствует персонажу. в буквальном смысле (чувствительно к регистру)
  6. [\s%]? матча один символ присутствует в \r или \n или \t или \f или \v
  7. % соответствует символу% в буквальном смысле (чувствительно к регистру)
  8. [\w/]*, где \w Match один символ присутствует в a-zA-Z0-9_
  9. / соответствует символу/буквально (чувствительно к регистру)

Вы можете поместить свое регулярное выражение в here и получить анализ в правой верхней части сайта.

+0

Большое спасибо. У меня еще несколько вопросов. 10. '[\ s%]?' ---- Что означает "?" здесь? 11. '[\ w/\] *' ---- Что здесь делает «*»? 12. Это регулярное выражение работает в основном для моих целей.Но мне также нужно извлечь номер из текста, например «KeyA: 5555 \ n KeyB:». Я хочу извлечь номер 5555 в этом случае, но это регулярное выражение извлекает «5555 \ n KeyB». Вы знаете, как внести изменения? Обратите внимание, что мне все еще нужно сопоставлять такие вещи, как% и косую черту (т. Е. Я не могу удалить их из регулярного выражения) – sh0731