【问题标题】:Regex (Python) - Removing a line starting with a delimiter and keeping other delimiters正则表达式 (Python) - 删除以分隔符开头的行并保留其他分隔符
【发布时间】:2019-11-13 12:55:50
【问题描述】:

我如何分离这样的东西:

; Remove this line  
     (?A or :B
        (G + D))

用 ; 删除行并用空格(删除空格)和'('或')'分隔标记作为分隔符,但在python中使用正则表达式保持它们。

最终结果应该是这样的:

['(', '?A', 'or', ':B', '(', 'G', '+', 'D', ')', ')']

但我无法消除';'行也不将 '(', ')' 标记分开。

到目前为止,我有这个:

re.split('[;.*]*[^()\[\]:?a-zA-Z0-9-]+', text)

【问题讨论】:

    标签: python regex split delimiter


    【解决方案1】:

    你可以使用

    import re
    rx = r'^;.*|([()])|\s+'
    s = """; Remove this line  
         (?A or :B
            (G + D))"""
    print(list(filter(None, re.split(rx, s, flags=re.M))))
    # => ['(', '?A', 'or', ':B', '(', 'G', '+', 'D', ')', ')']
    

    Python demo

    详情

    • ^;.* - 行首(flags=re.M 也会使 ^ 匹配行首)然后 ; 和除换行符之外的任何 0 个或多个字符
    • | - 或
    • ([()]) - 捕获组 1(一旦捕获,匹配项将在结果列表中输出):() char
    • | - 或
    • \s+ - 1+ 个空格(未捕获,因此这些匹配项将被忽略)。

    【讨论】:

    • 工作就像一个魅力,非常感谢你。我只是更改行首,因为有时它可能以空格/制表符开头, r'\s+;.*|([()])|\s+'
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 2013-06-22
    • 2016-02-07
    • 2012-08-13
    • 2014-11-22
    • 2011-02-24
    相关资源
    最近更新 更多