匹配换行符所包含的文本块

时间:2016-03-21 10:13:55

标签: python regex

我的文件格式总是三行,后面跟一个空行。哪个正则表达式匹配这三行的块?

line1
line2
line3

line4
line5
line6
...

我知道^\s*$可以匹配只包含空格的行,所以^\s*$(.*)^\s*$之类的内容应该匹配两个空行之间的内容,但似乎无法正常工作。

2 个答案:

答案 0 :(得分:2)

您可以使用from itertools import islice with open('input') as f: while True: lines = [line.strip() for line in islice(f, 4) if line.strip()] if not lines: break print(lines) # or otherwise process them 一次读取4行文件,如果是换行符,则丢弃最后一行:

static function get_pages( $page_slug = '' ) {

    $pages = array();
    // Default page properties
    $default_args = array(
        'menu-title' => '',
        'tab-title' => '',
        'parent' => 'admin.php',
        'in-menu' => false,
        'has-tab' => true,
        'tab-side' => false,
        'top-level' => false,
    );

    $pages['sat-options-general'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-options-general',
            'menu-title' => _x( 'Admin Theme', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Admin Theme Options', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Admin Theme Options', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_general_options_page' ),
            'in-menu' => true,
            'top-level' => true,
        )
    );

    $pages['sat-addons'] = array_merge(
        $default_args,
        array(
            'slug' => 'sat-addons',
            'menu-title' => _x( 'Addons', 'Page title in the menu', 'skizzar_admin_theme' ),
            'tab-title' => _x( 'Addons', 'Option tab title', 'skizzar_admin_theme' ),
            'title' => _x( 'Browse Addons', 'Option page title', 'skizzar_admin_theme' ),
            'callback' => array( __CLASS__, 'display_addons_page' ),
            'in-menu' => true,
        )
    );

    // Return
    if ( $page_slug ) {
        if ( ! isset( $pages[ $page_slug ] ) ) {
            return null;
        }
        return $pages[ $page_slug ];
    }

    return apply_filters( 'skizzar_admin_theme_tab', $pages, $default_args, $page_slug );
}

<强>演示

使用此输入:

line1
line2
line3

line4
line5
line6

line7
line8

输出

['line1', 'line2', 'line3']
['line4', 'line5', 'line6']
['line7', 'line8']

这也处理文件结束而没有完整的3行组的情况。

答案 1 :(得分:2)

您可以使用Python的groupby函数来读取行,直到找到空行,如下所示:

from itertools import groupby

with open('input.txt') as f_input:
    for k, g in groupby(f_input, lambda x: x != '\n'):
        if k:
            print [line.strip() for line in g]

然后,这将读取每三行作为一个块。如果有额外的空行,也会跳过这些行,或者如果块中有超过三行,这些行也会被读作单个块。

这将打印以下内容:

['line1', 'line2', 'line3']
['line4', 'line5', 'line6']