Я нашел тему Capturing group with findall?, но, к сожалению, она более простая и охватывает только группы, которые не перезаписываются.Findall vs поиск перезаписи групп в Python
Пожалуйста, давайте рассмотрим следующий пример:
S = "abcabc" # string used for all the cases below
1. FindAll - нет групп
print re.findall(r"abc", S) # ['abc', 'abc']
Общая идея: Нет групп здесь, так что я не планирующим findall
, чтобы возвращать список всех совпадений - подтвердите пожалуйста.
В этом случае: Findall
ищет abc
, находит его, возвращает, затем продолжает и находит второй.
2. FindAll - одна явная группа
print re.findall(r"(abc)", S) # ['abc', 'abc']
Общая идея: Некоторые группы здесь, так что я ожидаю findall
вернуть список всех групп - подтверждение пожалуйста.
В этом случае: Почему два результата пока есть только одна группа? Я понимаю это так:
findall
ищетabc
,считает,
помещает его в буфер группы памяти,
возвращает его
findall
начинает искатьabc
и так далее ...
Является ли это обоснование правильным?
3. FindAll - перезапись группы
print re.findall(r"(abc)+", S) # ['abc']
Это выглядит примерно выше все же возвращает только один abc
.Я понимаю это так:
findall
ищетabc
,считает,
помещает его в буфер группы памяти,
не возвращение это потому, что RE сам требует продолжения,
находит другое
abc
,помещает его в буфер памяти (группа перезаписывает предыдущий
abc
),строка заканчивается поэтому поиск концы, а также.
Это рассуждение правильно? Я здесь очень конкретный, так что если что-то не так (даже мельчайшие детали), то, пожалуйста, дайте мне знать.
4. Поиск - перезапись группы
Search
просматривает строку в поисках одной игре, так и re.search(r"(abc)", S)
re.search(r"(abc)", S)
, а, очевидно, возвращать только один abc
, то позвольте мне получить право на:
re.search(r"(abc)+", S)
print m.group() # abcabc
print m.groups() # ('abc',)
a) Конечно, весь матч abcabc
, но у нас все еще есть группы, поэтому могу ли я сделать вывод, что группы не имеют значения (несмотря на имя) для m.group()
? И почему ничто не перезаписывается для этого метода?
На самом деле, эта функция группировки круглых скобок совершенно не нужна здесь - в таких случаях я просто хочу использовать круглые скобки, чтобы подчеркнуть, что нужно делать вместе, повторяя вещи, не создавая никаких групп регулярных выражений.
b) Может ли кто-нибудь объяснить механизм позади возврата abcabc
(с точки зрения буферов и т. Д.) Аналогично тому, как я сделал в пуле ?
Почему бы не закончить предыдущий вопрос первым? У вас есть 2 ответа там, и вы не представили никакой обратной связи. –
Я понимаю, что у вас есть вопросы, это нормально. Но в том, как работает этот сайт, лучше всего отделить каждый вопрос, чтобы ответы на вопрос могли быть полными, а не частичными. Многое из того, что вы просите, также описано в документации модуля regex, и очень сложно понять, какие именно вопросы вы задаете, я предлагаю вам сначала провести какое-либо исследование, возможно, ваши вопросы уже есть ответы, иначе разделите ваши вопросы и дать достаточную информацию, чтобы каждый из них был автономным. Минимальный рабочий пример кода, с которым вы хотите помочь. –
@Wiktor, я собирался понять, как сначала работают группы на Python, а затем вернуться к предыдущей теме, так как я должен признать, что ответы вашего и другого человека мне не совсем понятны. Мне было интересно, где задать свои вопросы, но, наконец, решил, что лучше разделить их, а не делать предыдущую тему слишком длинной. Ваш ответ только осознал, что мне нужно знать кое-какие знания, и я спросил об этом здесь. Если это не так, я могу поместить его туда, но я не могу себе представить, как это может быть более читаемым ... – Drizzt