匹配列表与正则表达式
我想用正则表达式来解析下面的语句:匹配列表与正则表达式
(o) Multi
line
text
(o) Single line text
(o) Single line text
当我使用下面的正则表达式,源的全部文本被捕获:
(?<bullet>\(o\)\) (?<text>.+)
我想要实现的是有text
组的三个匹配,即。
Multi
line
text
然后两次Single line text
。
如果解决方案是前瞻/后面,如何使用它来实现这一目标?
谢谢。
您可以使用先行检查下一个(O)或输入
(?<bullet>\(o\)) (?<text>.*?)(?=\(o\)|$)
只需在正则表达式的末尾添加(o)或EOF,以便在下一个项目符号或文件末尾处切断。我不知道你使用哪种类型的正则表达式来给你确切的正则表达式,但是想法是匹配的。
这是如何在正常的正则表达式匹配EOF: regex to match EOF
的到底是为什么使用正则表达式在所有?看起来像你有两种情况 - 一行以子弹开头或不行。如果以子弹开头,请将其关闭,然后用剩余的行开始新的文本对象。如果它不以子弹开头,请将该文本追加到前一个文本对象。伪代码:
text = []
i = -1
for line in data:
if line.starts_with('(o)'):
i += 1
text[i] = line[2:] # all characters in the line after the first three
else:
text[i].append(line)
谢谢,这将工作,但我特别需要使用正则表达式。 – grizzly 2012-01-10 22:28:14
不幸的。我认为正则表达式是一种只写语言,因此尽量保留最简单的正则表达式作为最后手段。请至少在正则表达式中提出一些明确的评论,所以当你在六个月内回来时,你不需要解码它。 – 2012-01-11 17:07:14
工程就像一个魅力。但星号后的问号是什么意思? – grizzly 2012-01-10 22:16:44
这意味着它的懒惰或不合理,基本上它说它会采取最少量的文本匹配。你可以在这里阅读http://www.regular-expressions.info/repeat.html – 2012-01-11 07:37:34