python-3.x - 在 python 中的正则表达式匹配前添加分隔符
问题描述
我在这里有以下文本块,并想在子句编号前添加一个分隔符(4.1 ... 4.2 ...,等等)
4.1 Use unique passwords (Manual)
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu velit a libero convallis hendrerit. Nulla interdum fermentum viverra. Maecenas tincidunt sollicitudin odio. Aenean a erat sagittis, lacinia nulla eu, ornare velit. Suspendisse tempor at nisi eu mattis. Phasellus in ante magna. Quisque nisl lacus, fermentum pulvinar odio id, auctor sagittis nisl. Proin bibendum cursus orci vitae finibus.
4.2 Set password lifetime (Automated)
Quisque ut vehicula diam. Maecenas ac nulla cursus, dictum odio ac, lobortis dui. Nullam euismod, enim sed mollis elementum, tellus urna porttitor augue, ac venenatis tortor diam eget leo. In euismod dapibus tortor et vehicula. Aliquam erat volutpat. Quisque id rutrum libero. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sollicitudin pellentesque magna sit amet malesuada. Aenean pulvinar metus sed justo tincidunt, et fermentum sem gravida. Aliquam varius lacus sit amet aliquam elementum. Pellentesque a varius magna, at euismod ligula. Praesent odio nunc, faucibus vel urna non, varius porta velit.
这样文本中的每个子句都会出现“分隔符”:
'delimiter' 4.3 Set password expiry warning (Automated)
Quisque ut vehicula diam. Maecenas ac nulla cursus, dictum odio ac, lobortis dui. Nullam euismod, enim sed mollis elementum, tellus urna porttitor augue, ac venenatis tortor diam eget leo. In euismod dapibus tortor et vehicula. Aliquam erat volutpat. Quisque id rutrum libero. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
我正在使用 re.sub 执行匹配和替换,但我不太确定如何不完全删除子句编号:
result = re.sub(r'[0-9\.]{3,}\s*[A-Z][\d\w\s/\-\,\(\)\\\"]{1,}\s*\(Automated|Manual\)', 'delimiter', text)
任何帮助,将不胜感激!
解决方案
你可能会使用
^\d+(?:\.\d+)? .*\((?:Manual|Automated)\)
^
字符串的开始\d+(?:\.\d+)?
将 1+ 位数字与可选的小数部分匹配.*\((?:Manual|Automated)\)
匹配字符串中的一个空格(Manual)
和(Automated)
在替换中,使用分隔符后跟完整匹配
delimiter \g<0>
例如
import re
regex = r"^\d+(?:\.\d+)? .*\((?:Manual|Automated)\)"
s = ("4.1 Use unique passwords (Manual)\n"
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu velit a libero convallis hendrerit. Nulla interdum fermentum viverra. Maecenas tincidunt sollicitudin odio. Aenean a erat sagittis, lacinia nulla eu, ornare velit. Suspendisse tempor at nisi eu mattis. Phasellus in ante magna. Quisque nisl lacus, fermentum pulvinar odio id, auctor sagittis nisl. Proin bibendum cursus orci vitae finibus.")
result = re.sub(regex, r"delimiter \g<0>", s, 0, re.MULTILINE)
if result:
print (result)
输出
分隔符 4.1 使用唯一密码(手动) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu velit a libero convallis hendrerit。Nulla interdum infantum viverra。Maecenas tincidunt sollicitudin odio。Aenean a erat sagittis, lacinia nulla eu, ornare velit。nisi eu mattis 的 Suspendisse tempor。大前锋中的Phasellus。Quisque nisl lacus, pulvinar odio id, auctor sagittis nisl。Proin bibendum cursus orci vitae finibus。
推荐阅读
- elasticsearch - Kibana 可视化:使用 JSON 文档中的字段创建条形图
- php - 登录不直接到页面
- r - 在我的 gganimate 上操作胶水生成的标题
- algorithm - 使用 Dijkstra 时如何加权其他因素
- angular - 角度反应形式使用什么方法来注册表单控件名称
- python - matplotlib 中子图的多个颜色条(具有不同的范围/刻度)
- docker - 我的 docker-compose.yml 无法构建 mysql5.7 容器
- css - 我可以更改斜体文本的背景颜色吗?
- python - 注册鼠标事件的不可见窗口
- nginx - 如何通过 Nginx-sticky-module 在两个上游中使用一个 Nginx Cookie(路由)