正则表达式 (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', ')', ')']
详情
^;.*
- 行首(flags=re.M
也会使 ^
匹配行首)然后是 ;
以及除以下以外的任何 0 个或更多字符换行字符
|
- 或
([()])
- 捕获组 1(捕获后,匹配项将在结果列表中输出):a (
或 )
char
|
- 或
\s+
- 1+ 个空格(未捕获,因此这些匹配将被排除在外)。
如何分离这样的东西:
; 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', ')', ')']
详情
^;.*
- 行首(flags=re.M
也会使^
匹配行首)然后是;
以及除以下以外的任何 0 个或更多字符换行字符|
- 或([()])
- 捕获组 1(捕获后,匹配项将在结果列表中输出):a(
或)
char|
- 或\s+
- 1+ 个空格(未捕获,因此这些匹配将被排除在外)。