匹配以python中的特定字符开头的行块

时间:2015-07-28 14:36:28

标签: python regex multiline

我想搜索一个文本块并匹配以python中的特定字符开头的行 - 但是想要在该规则被破坏时立即停止。

例如,在以下文本中:(以星号开头)

*指向一个

*指向两个

**指向两个人。

*最后一点三

但是这里有一段文字

*四

我想在遇到非项目符号文本后立即停止搜索。即搜索/查找应该只返回文本到" *最后一点三"。

我一直在尝试各种正则表达式,但没有运气。我到目前为止最接近的是

R'(^ [*(**)] *。)'

任何帮助将不胜感激。

由于

TJR

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式来获取这些块:

^(?:\*+[^*\n]*?\n*(?=\*))*\*+[^*\n]*?(?:\n|$)(?!\*)

请参阅demo

答案 1 :(得分:0)

你的意思是,

re.findall(r'^(?s)\\*[^\n]*(?:\n\\\*[^\n]*)*', s)

DEMO

答案 2 :(得分:0)

如果目标只是匹配条件不正确的流中的第一个点,那么表达这个的最简洁方式似乎是

>>> pattern = r'^(?s)\*[^\n]*(?:\n+\*[^\n]*)*'

>>> target = """* point one
...
... * point two
...
... ** point two.one
...
... * last point three
...
... But here is a text in between
...
... * four
... """
>>> m=re.search(pattern,target)
>>> m.group(0)
'* point one\n\n* point two\n\n** point two.one\n\n* last point three'