如何匹配雙散列“##”之后的所有內容,直到下一個雙散列“##”,并包括“#”字符的任何重復,而不是“##”。例如,下面的示例應回傳兩個匹配項,一個用于第 1 章和 1.1 章,第二個用于第 2 章。
## chapter 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Suspendisse mollis magna nec felis gravida, id posuere libero molestie.
### subchapter 1.1
Sed vel ipsum eget tortor maximus ultrices vitae eget dolor.
## chapter 2
Aenean pellentesque lectus quis ex tristique ultrices. Vestibulum eget purus eu ipsum vestibulum pulvinar
目前我發現最好的是以下正則運算式:
((?!#){2}[\s\S])
但是,當找到 ### 或 #### 并將其計為新章節時,它會感到困惑。
鏈接到正則運算式示例:https ://regex101.com/r/gydtq1/1
uj5u.com熱心網友回復:
您可以使用
re.findall(r'(?ms)^##(?!#).*?(?=\n##(?!#)|\Z)', text)
re.findall(r'^##(?!#).*?(?=\n##(?!#)|\Z)', text, re.M | re.S)
請參閱正則運算式演示。詳情:
(?ms)- 一個re.DOTALL(re.S) 和re.MULTILINE(re.M) 標志^- 一行的開始##(?!#)- 一個##不緊跟在后面的字串#.*?- 盡可能少的零個或多個字符(?=\n##(?!#)|\Z)- 緊跟換行符的位置,而##不是緊跟#字串或結尾的位置。
uj5u.com熱心網友回復:
匹配有時感覺“被高估了”,另一種可能是
re.split(r'(?m)^##(?!#)', text)
部分與接受的答案中的部分非常相似:
(?m)- 多行標志(可以作為第四個引數單獨傳遞)^##(?!#)-##行首的字串 (^),不緊隨其后#
警告:結果串列將包含第一個之前的所有內容的條目,##對于示例來說,它是一個空字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437266.html
上一篇:PHPRegex:如何匹配破折號之前的單詞?[復制]
下一篇:浮點或字串的正則運算式
