我需要一个在分隔符内提取文本的正则表达式,但我是 在分隔符[DATA n]和[END DATA]
中提取值时出现问题这是我的正则表达式
(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])
以下是我想要匹配的示例数据
这里有一些文字
[DATA 1]
data one
some more data
[END DATA]
[DATA 2]
data two
more data
data
[END DATA]
[DATA n]
more data
data
[END DATA]
答案 0 :(得分:21)
当你真的不需要它时,你似乎正在使用像lookbehind和lookahead这样的正则表达式功能。尝试:
\[DATA\s+\d+\](.*?)\[END DATA\]
此正则表达式(.*?)
中只有一个捕获组。使用此功能后,您要查找的结果应位于捕获组1中。
另请注意,我使用了非贪婪的.*?
匹配,该匹配将匹配第一个后面的[END DATA]
实例。如果不使用此功能,如果仅使用.*
,则会捕获 last [END DATA]
以外的所有内容。
答案 1 :(得分:6)
在正则表达式中,[
之间的]
文本称为字符类,而正则表达式引擎只会匹配括号中一个字符。你只需要使用反斜杠来使它们成为文字:
(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])
答案 2 :(得分:4)
默认情况下,点特殊字符与换行符不匹配。确保您使用单行修饰符来实现正则表达式,或使用[\S\s]*?
代替.*?
有关详细信息,请参阅http://www.regular-expressions.info/modifiers.html和http://www.regular-expressions.info/dot.html。
答案 3 :(得分:1)
使用\来转义字符。
\[DATA\s\d\]+([^\[]+)\[[^\]]+\]