首页 > 解决方案 > 在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,所以请原谅。

标签: pythontextextractparagraph

解决方案


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

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

正则表达式演示

例如使用 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.']

推荐阅读