Ответ 1
>>> p = re.compile('.*', re.DEBUG)
max_repeat 0 65535
any None
>>>
regex '|' оператор против отдельных прогонов для каждого подвыражения
Есть ли способ отладки регулярного выражения в Python? И я не имею в виду процесс попытки и попытки, пока они не работают:)
EDIT: здесь можно отлаживать регулярные выражения в perl:
use re 'debug';
my $str = "GET http://some-site.com HTTP/1.1";
if($str =~/get\s+(\S+)/i) {
print "MATCH:$1\n";
}
При запуске кода приведенный выше код выводит следующий вывод на моем компьютере:
Compiling REx "get\s+(\S+)"
Final program:
1: EXACTF (3)
3: PLUS (5)
4: SPACE (0)
5: OPEN1 (7)
7: PLUS (9)
8: NSPACE (0)
9: CLOSE1 (11)
11: END (0)
stclass EXACTF minlen 5
Matching REx "get\s+(\S+)" against "GET http://some-site.com HTTP/1.1"
Matching stclass EXACTF against "GET http://some-site.com HTTP/1.1" (33 chars)
0 | 1:EXACTF (3)
3 | 3:PLUS(5)
SPACE can match 1 times out of 2147483647...
4 | 5: OPEN1(7)
4 | 7: PLUS(9)
NSPACE can match 20 times out of 2147483647...
24 | 9: CLOSE1(11)
24 | 11: END(0)
Match successful!
MATCH:http://some-site.com
Freeing REx: "get\s+(\S+)"
>>> p = re.compile('.*', re.DEBUG)
max_repeat 0 65535
any None
>>>
regex '|' оператор против отдельных прогонов для каждого подвыражения
Почему бы вам не использовать какой-либо инструмент regEx (я обычно использую Regulator) и тестирую выражение регулярного выражения там и когда вы выполняются, просто скопируйте/вставьте его в свой код.
https://www.debuggex.com тоже очень хорошо. Это онлайн-отладчик Python (и еще несколько языков), который имеет довольно аккуратную визуализацию того, что делает и что не соответствует. Хороший ресурс, если вам нужно быстро создать регулярное выражение.
Как уже упоминалось, существует также Regexbuddy
Что ReggexBuddy имеет, что другие инструменты не имеют встроенного
Не уверен в том, что вы делаете это прямо в Python, но я определенно мог бы предложить использовать инструмент редактора RegEx. В любом случае, это ваш лучший выбор. Лично я использовал The Regulator и нашел, что это очень полезно. Некоторые другие перечислены в этом SO-потоке.
Я часто использую RegexPal для быстрых проверок (прототип регулярного выражения онлайн). Он содержит множество общих выражений, перечисленных вместе с простым выражением. Очень удобно, когда у вас нет специального инструмента, и вам просто нужен быстрый способ выработать нерегулярное регулярное выражение.