python正则表达式在每第4个周期后添加

时间:2015-02-03 09:10:16

标签: python regex

我想在每隔4个句点后插入<br>,但是当句点代表小数或字母缩写时不是吗?

我已经完成了this,但由于我是regex的新手,有人可以指导我如何在Python中编写等效文件吗?

例如: -

'I'm a Python programmer. I love to code. I'm a boy. I earn $100.39 , from which I spend $50 in xyz. I eat biscuits. I eat snacks.I eat pizza etc. '

预期的O / P

'I'm a Python programmer. I love to code. I'm a boy. I earn $100.39 , from which I spend $50 in xyz.<br> I eat biscuits. I eat snacks.I eat pizza etc. '

说明 -

由于100.39中的.不被视为句点,因此它实际上是一个小数,因此此字符串中的第4个句点是xyz

1 个答案:

答案 0 :(得分:1)

((?:.*?(?<![A-Z])\.(?=\s*[A-Z]|\s*$)){4})

试试这个。替换为\1<br>。见演示。

https://regex101.com/r/vD5iH9/50

import re
p = re.compile(r'((?:.*?(?<![A-Z])\.(?=\s*[A-Z]|\s*$)){4})')
test_str = "I'm a Python programmer. I love to cX.Yode. I'm a boy. I earn $100.39 , from which I spend $50 in xyz. I eat biscuits. I eat snacks.I eat pizza etc. "
subst = "\1<br>"

result = re.sub(p, subst, test_str)

正如评论中所说,不能有万无一失的正则表达式可以做你想要的,但如果你的输入被修复,你可以在某种程度上处理,如果你没有任何其他方式。在这里

我们通过捕获.之前的任何内容然后将其替换为\1br来找到4个句子块。但是.不应该是小数,所以添加了一个前瞻,即.之后的任何内容都应该是空格和大写字母。为了否定缩写,添加了.后面不应该有a capital字母的后视。这有一个陷阱,但如果U.S.如果在句末结束时它会失败。