正则表达式 (Python) - 删除以定界符开头的行并保留其他定界符

Regex (Python) - Removing a line starting with a delimiter and keeping other delimiters

如何分离这样的东西:

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

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

最终结果应该是这样的:

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

但我无法消除';'将'(', ')' 标记作为它们自己的标记行分隔。

到目前为止我有这个:

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

您可以使用

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(捕获后,匹配项将在结果列表中输出):a () char
  • | - 或
  • \s+ - 1+ 个空格(未捕获,因此这些匹配将被排除在外)。