鉴于此字符串:
@@@@ foo foo
@@@@ bar bar
bla bla bla
@@@@ one two test
@@@@ test one two
bla bla bla bla
是否可以使用Python正则表达式捕获以@@@@
开头的多行行?
预期结果:
group1: '@@@@ foo foo\n@@@@ bar bar\n'
group2: '@@@@ one two test\n@@@@ test one two'
我正在尝试:
(@@@@ [A-Za-z]+)
但我确实有4个不同的小组。
答案 0 :(得分:0)
您可以使用
(?m)^@{4}.*(?:\n@{4}.*)*\n?
请参阅regex demo。
<强>详情
(?m)
- re.MULTILINE
内联选项^
- 开始行@{4}
- 4 @
个字符.*
- 整行到LF(包含CR)(?:\n@{4}.*)*
- 重复0次或更多次
\n
- 新行LF @{4}
- 四个@
字符.*
- 其余部分\n?
- 可选的LF(使用*
代替?
来匹配0次或更多次重复)请注意,它也适用于CRLF结尾。
请参阅Python demo:
import re
rx = r"(?m)^@{4}.*(?:\n@{4}.*)*\n?"
s = "@@@@ foo foo\n@@@@ bar bar\nbla bla bla\n\n@@@@ one two test\n@@@@ test one two\nbla bla bla bla"
s2 = "@@@@ foo foo\r\n@@@@ bar bar\r\nbla bla bla\r\n\r\n@@@@ one two test\r\n@@@@ test one two\r\nbla bla bla bla"
print(re.findall(rx, s))
# => ['@@@@ foo foo\n@@@@ bar bar\n', '@@@@ one two test\n@@@@ test one two\n']
print(re.findall(rx, s2))
# => ['@@@@ foo foo\r\n@@@@ bar bar\r\n', '@@@@ one two test\r\n@@@@ test one two\r\n']