Python RE re.split (), результаты начинаются с пустой строки - PullRequest
0 голосов
/ 28 января 2019

У меня есть несколько вопросов к описанию / примерам split () из документов Python RE

Если в разделителе есть группы захвата, и они совпадают в началестрока, результат начнется с пустой строки.То же самое относится к концу строки:

re.split(r'(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']

В этом примере есть группа захвата, она совпадает в начале и конце строки, таким образом, результат начинается и заканчивается спустая строка.Вне понимания того, что это происходит, я хотел бы лучше понять аргументацию.Это объясняется следующим образом:

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

Может ли кто-нибудь расширить это?Относительно чего?

Мой другой запрос связан с этим примером:

re.split(r'(\W*)', '...words...')
['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']

\w будет соответствовать любому символу, который может использоваться в любом слове на любом языке (Flag: unicode), или будет эквивалентен [a-zA-Z0-9_] (Флаг: ASCII), \W является обратным к этому.Может ли кто-нибудь рассказать о каждом из совпадений в приведенном выше примере, объяснить каждое (если возможно) с точки зрения того, что сопоставляется (\ B, \ U, ...).

Добавлено 29/01/2019:

Кроме того, что я после, не было ясно сказано (мой плохой).Что касается второго примера, мне любопытно узнать, какие шаги были предприняты для получения результата (как обработал пример модуль re python).После прочтения этого поста о регулярных выражениях нулевой длины все прояснится, но мне все равно было бы интересно, если кто-нибудь сможет разбить логику до ['', '...', '', '', 'w', в результатах.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Отметьте это:

>>> re.split('(a)', 'awords')
['', 'a', 'words']
>>> re.split('(w)', 'awords')
['a', 'w', 'ords']
>>> re.split('(o)', 'awords')
['aw', 'o', 'rds']
>>> re.split('(s)', 'awords')
['aword', 's', '']

Всегда на втором месте (индекс 1).

С другой стороны:

>>> re.split('a', 'awords')
['', 'words']
>>> re.split('w', 'awords')
['a', 'ords']
>>> re.split('s', 'awords')
['aword', '']

Почти то же самое, только группа ловли не внутри.

0 голосов
/ 28 января 2019

То, что он пытается сказать, это то, что когда у вас есть группа захвата в разделителе, и она соответствует началу строки, результирующий список всегда будет начинаться с разделителя.Точно так же, если он совпадает в конце строки, список всегда будет заканчиваться разделителем.

Для согласованности это верно, даже если разделитель соответствует пустой строке.Считается, что входная строка имеет пустую строку перед первым символом и после последнего символа, и разделитель будет соответствовать им.И тогда они будут первым и последним элементом результирующего списка.

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