[英]python regexp add <br> after every 4th period
我想在第四个句点之后插入<br>
,但是当句点代表小数或字母缩写时不想要?
我已经经历了这个过程 ,但是由于我是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
((?:.*?(?<![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)
如评论中所述,不能有万无一失的正则表达式可以执行您想要的操作,但是如果您的输入是固定的,那么您可以在某种程度上处理(如果您没有其他方法)。 这里
通过捕获多达的内容,我们发现了4个句子块.
然后将其替换为\\1br
。 但是.
不应为小数,因此请增加前瞻性,以便后续操作.
应该是空格和大写字母。 为了消除缩写,在其后面添加了一个外观.
后面不应有a capital
字母。 但是,这有一个陷阱,因为如果在句子结尾出现这种情况,在US
情况下将失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.