python - Python使用正则表达式匹配具有多个换行符的段落
问题描述
我尝试使用 Python 和 Re 匹配段落。
文本示例:
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua。在 vero eos et accusam et justo duo dolores et ea rebum。
这里有两个或多个换行符
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet。
这里有两个或多个换行符
Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua。在 vero eos et accusam et justo duo dolores et ea rebum。Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet。
这个表达式似乎几乎完成了这项工作:
paragraphs = re.findall(r'(?s)((?:[^\n][\n]?)+)', textContent)
但我想确保仅在有两个或多个换行符时才匹配。目前它匹配得太频繁了。
编辑:
ART. WEFWEFEW
1 SDVSDRG: **<at the momemnt it breaks here, but it shouldnt>**
a. wevvdfvdfd
b. sdfsdfsdfsdfsdfsdghtrhrth
编辑2:
ART. WEFWEFEW
1 SDVSDRG:
**here are two line-breaks, but dont split this paragraph**
**at the momemnt it breaks here, but it shouldnt**
a. wevvdfvdfd
b. sdfsdfsdfsdfsdfsdghtrhrth
解决方案
查看RegEx101(?m)(?:.+(?:\n.)?)+
上的这个正则表达式,您还可以在其中得到它的解释。
使用此正则表达式的示例 Python 代码:
import re
import pprint
textContent = '''Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero eos et
accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet.
Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna
aliquyam erat, sed diam voluptua. At vero eos et accusam et
justo duo dolores et ea rebum. Stet clita kasd gubergren, no
sea takimata sanctus est Lorem ipsum dolor sit amet.
ART. WEFWEFEW
1 SDVSDRG:
a. wevvdfvdfd
b. sdfsdfsdfsdfsdfsdghtrhrth'''
pprint.pprint(re.findall(r'(?m)(?:.+(?:\n.)?)+', textContent))
输出:
['Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n'
'sed diam nonumy eirmod tempor invidunt ut labore et dolore\n'
'magna aliquyam erat, sed diam voluptua. At vero eos et\n'
'accusam et justo duo dolores et ea rebum.',
'Stet clita kasd gubergren, no sea takimata sanctus est Lorem\n'
'ipsum dolor sit amet.',
'Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam\n'
'nonumy eirmod tempor invidunt ut labore et dolore magna\n'
'aliquyam erat, sed diam voluptua. At vero eos et accusam et\n'
'justo duo dolores et ea rebum. Stet clita kasd gubergren, no\n'
'sea takimata sanctus est Lorem ipsum dolor sit amet.',
'ART. WEFWEFEW\n'
' 1 SDVSDRG:\n'
' a. wevvdfvdfd\n'
' b. sdfsdfsdfsdfsdfsdghtrhrth']
Rextester上的演示。
推荐阅读
- c# - WCF 何时从 app.config 加载值?
- android - Android Room - 将@Entity 拆分为 Key 和 DataObject
- python - 引发错误后有什么方法可以自动运行脚本
- html - 如何在搜索栏旁边对齐图像
- typescript - 如何从类型初始化 BehaviorSubject?
- postgresql - pg_ctl促进不快速暂停复制
- javascript - 如何将字符串附加到会话存储密钥?
- sql - SQL Server检查值是否在下一行重复
- laravel-5 - Laravel 雄辩的模型,其中日期时间小于或等于
- c# - 限制一天工作的范围数