在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][dws/-,()\"]{1,}s*(Automated|Manual)', 'delimiter', text)

任何帮助都将不胜感激!

您可以使用

^d+(?:.d+)? .*((?:Manual|Automated))
  • ^字符串开始
  • d+(?:.d+)?将1+位数字与可选小数部分匹配
  • .*((?:Manual|Automated))匹配空间和字符串中的(Manual)(Automated)

Regex演示

在替换中,使用分隔符,后跟完全匹配的

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 sitamet,consectetur adipiscing elit。欧盟自由实践康瓦利斯·亨德里特。疣状中间沟。Maecenassollicitiudin odio。埃涅阿斯纪是一个古老的地方,ornare velit。暂不生效。事前阶段麦格纳。Quisque nisl lacus,fermentum pulvinar odio id,auctor sagittisnisl。这是一个很好的例子。

最新更新