[英]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.