获取Python中某个符号后的段落

2024-05-31 23:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python初学者

我有一个以下格式的大型txt文件,由多个一句话段落组成:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

****
Sed id placerat magna.

*******
Pellentesque in ex ac urna tincidunt tristique. 

Etiam dapibus faucibus gravida.

我试图将输出作为仅输出星号段落后面的段落[每个星号段落至少4个星号]

我需要的输出:

Sed id placerat magna.

Pellentesque in ex ac urna tincidunt tristique. 

我尝试过这样的方法,但我不知道A]如何设置每个星号段落的最少4个星号,以及B]如何设置星号段落之后的段落

import re

article_content = [open('text.txt').read() ]

after_asterisk_article_paragraph = []
 
string = "****"
after_asterisk_article_paragraph = string[string.find("****")+4:]

print(*after_asterisk_article_paragraph, sep='\n\n')

再说一遍,我刚刚开始学习Python,请原谅


Tags: intxtidstringarticle星号asterisksed
1条回答
网友
1楼 · 发布于 2024-05-31 23:24:57

您可以读取整个文件,并使用一个模式来匹配至少4倍的asterix,然后是所有非空行或以4倍asterix开头的行

^\*{4,}((?:\r?\n(?!\s*$|\*{4}).+)*)
  • ^\*{4,}从字符串开始匹配4次或更多次*
  • (捕获组1
    • (?:非捕获组
      • \r?\n匹配换行符
      • (?!\s*$|\*{4}).+如果整行不是空的,或者以4次开始*使用负前瞻(?!匹配整行
    • )*可选地重复该组
  • )关闭捕获组1

Regex demo

例如,使用re.findall返回捕获组1的值:

import re
file = open('text.txt', mode='r')
result = [s.strip() for s in re.findall(r'^\*{4,}((?:\r?\n(?!\s*$|\*{4}).+)*)', file.read(), re.MULTILINE)]
print(result)
file.close()

输出

['Sed id placerat magna.', 'Pellentesque in ex ac urna tincidunt tristique.']

相关问题 更多 >