Оператор чередования |
говорит "соответствует этому регулярному выражению или соответствует этому регулярному выражению". Два подвыражения не могут совпадать одновременно. Если первое совпадение, второе никогда не будет проверено.
Чтобы извлечь материал с обеих сторон двоеточия, просто создайте регулярное выражение, которое захватывает текст с обеих сторон в одном совпадении.
re.findall(r'([^\n:]+):([^\n:]+)', s6)
Чтобы обрезать пропуски вокруг совпадений, вам нужно более сложное регулярное выражение, за исключением, разумеется, если вы знаете, что совпадающие строки всегда будут одним токеном (т. Е. Каждая представляет собой одну алфавитную строку без пробелов вit):
re.findall(r'(\w+)\s*:\s*(\w+)', s6)
Может быть, для нескольких токенов попробуйте
re.findall(r'\s*([^\n:]+?)\s*:\s*([^\n:]+?)(?=\s*(?:\n|$))', s6)
, где мы очень заметно чередуем жадное и не жадное сопоставление, чтобы получить максимально короткие строки, которые по-прежнему удовлетворяют обычнымВыражение.
Или вы можете развернуться и превратить жадность в свое преимущество:
re.findall(r'(\w+(?:[^\n\S]+\w+)*)\s*:\s*(\w+(?:[^\n\S]+\w+)*)', s6)
, где мы собираем столько захваченных пробелами токенов, сколько мы можем в захвате, до тех пор, покапробел не содержит новой строки.
Более подробно, e+
соответствует как можно большему количеству (жадный соответствия) и e+?
как можно меньше (не жадный или скупой соответствие). (?=...)
- это запрос, требующий соответствия следующего выражения, без захвата или использования соответствующего текста. Таким образом, e(?=e)
применительно к тексту eee
сначала будет соответствовать начальному e
, а на следующей итерации findall
найдет сразу следующую, даже если он уже участвовал в удовлетворениипредыдущий матчИ, конечно же, (?:...)
- это простая не захватывающая скобка для группировки, а [^\n\S]
- это класс символов, который соответствует любому символу, который не является символом новой строки и ... не не членомкатегория пробелов - так эффективно любые пробелы, кроме новой строки.
Обратите внимание также на то, как мы явно избегаем сопоставления двоеточия или новой строки в выражениях захвата.
Новичок: «Как я могу сопоставить всеэти строки? "
Мастер:" Как я могу сопоставить только эти строки? "