我没有正则表达式专家,但我有同事将我视为一个并请求我帮助解决他们的正则表达式问题。今天这个让我很难过,而且我认为它应该没有。 (我不确切知道同事正在使用什么样的正则表达式,所以我猜任何常见的正则表达式格式都可以做出答案!)
如何提取由它们之间的单个分隔符分隔的数据部分?这可以在一个正则表达式中完成吗?例如:
**********
some data
here
**********
is broken into
*sections* by
**********
the repeated
**********
blocks of asterisks
**********
它的分隔符为"**********"
(\*{10}
),全局正则表达式应返回值["some data\nhere", "is broken into\n*sections* by", "the repeated", "blocks of asterisks"]
。
我可以通过以下方式轻松获得 something that matches 交替的块
/(?:^|\n)\*{10}\n([\s\S]*?)\n\*{10}(?:\n|\$)/g
//=> ["some data\nhere", "the repeated"]
但是第一场比赛"用完了#34;分隔符的第二个实例,它不可用作第二个实例的开头。
有一种简单的正则表达式吗?
答案 0 :(得分:1)
嗯......最简单的方法是拆分\*{10,}
,但如果你的工具不能让你这样做,你可以尝试以下方法:
\s*\*{10,}\s*(*SKIP)(*FAIL)|(?:.(?!\*{10}))+
既然你让我们在答案中使用任何风格,那就是Perl / PCRE唯一的正则表达式。
或者如果您需要更简单的语法:
(?:\*{10,}\s*)?((?:.(?!\*{10}))+)
Demo。结果位于$1
。
答案 1 :(得分:1)
也许是这样的
(?s:(?:\*{10}|.)(.*?)\*{10}|(.*?)\*{10}|(.*?))
虽然我不确定你想要哪种格式。拟议的正则表达式将令牌投入第1组。
干杯!