регулярное выражение Python к разделенным абзацам

Вот почему он называется «пост-инкрементирующим оператором». По сути, все это выражение , которое приводит к значению. a + 1 - это выражение, которое приводит к значению 124. Если вы назначаете это b с b = a + 1, b имеет значение 124. Если вы не присваиваете результат чему-либо, a + 1 будет по-прежнему в результате получится значение 124, оно просто будет выброшено немедленно, так как вы не «поймаете» его где-нибудь.

BTW, даже b = a + 1 - это выражение, которое возвращает 124. Полученное значение присваивания выражение - назначенное значение. Вот почему c = b = a + 1 работает так, как вы ожидали.

В любом случае особенность выражения с ++ и -- заключается в том, что в дополнение к возврату значения оператор ++ модифицирует переменная напрямую. Итак, что происходит, когда вы выполняете b = a++, выражение a++ возвращает значение 123 и увеличивает a. Инкремент post сначала возвращает значение, , а затем увеличивает, а инкремент pre ++a сначала увеличивается, затем возвращает значение. Если вы просто написали a++ самостоятельно без назначения, вы не заметите разницы. Вот как обычно используется a++, как short-hand для a = a + 1.

Это довольно стандартный.

5
задан Brian Burns 18 January 2017 в 14:17
поделиться

4 ответа

К сожалению, нет никакого хорошего способа записать "пространство, но не новую строку".

Я думаю лучшее, которое можно сделать, добавляет некоторое пространство с x модификатор и попытка факторизовать уродство немного, но это сомнительно: (?x) (?: [ \t\r\f\v]*? \n ){2} [ \t\r\f\v]*?

Вы могли также попытаться создать подправило только для класса символов и интерполировать его три раза.

4
ответ дан 14 December 2019 в 09:05
поделиться

Не regexp, но действительно изящный:

from itertools import groupby

def paragraph(lines) :
    for group_separator, line_iteration in groupby(lines.splitlines(True), key = str.isspace) :
        if not group_separator :
            yield ''.join(line_iteration)

for p in paragraph('p1\n\t\np2\t\n\tstill p2\t   \n     \n\tp'): 
    print repr(p)

'p1\n'
'p2\t\n\tstill p2\t   \n'
'\tp3'

Вам решать для разделения вывода, поскольку Вам нужен он, конечно.

Вдохновленный известной "Поваренной книгой Python" ;-)

1
ответ дан 14 December 2019 в 09:05
поделиться

Вы пытаетесь вывести структуру документа в простом тесте? Вы делаете то, что делает docutils?

Вы смогли просто использовать синтаксический анализатор Docutils, а не самокрутку.

2
ответ дан 14 December 2019 в 09:05
поделиться

Почти то же, но использование нежадных кванторов и использование в своих интересах пробельной последовательности.

\s*?\n\s*?\n\s*?
0
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: