python regexp每隔4个周期添加<br>

2024-06-01 03:46:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在每四个句点后插入<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中的.不被认为是一个句点,它实际上是一个十进制,因此这个字符串中的第四个句点在xyz之后


Tags: toinfrombrwhichcodeprogrammerboy
1条回答
网友
1楼 · 发布于 2024-06-01 03:46:17
((?:.*?(?<![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)

正如在评论中所说的,不可能有万无一失的regex可以做你想做的事情,但是如果你的输入是固定的,你可以在某种程度上处理,如果你没有任何其他的方法。这里

我们通过捕获任何到.的内容,然后用\1br替换它,找到4个句子块。但是.不应该是十进制的,所以添加了一个向前看,即.后面的任何内容都应该是空格和大写字母。为了否定缩写,在.后面添加了一个look,它后面不应该有a capital字母。不过,这有一个陷阱,因为如果出现在句末,它将在U.S.的情况下失败。你知道吗

相关问题 更多 >