使用正则表达式提取方括号内的文本和外部文本

时间:2019-01-12 21:30:26

标签: regex

我正在尝试提取方括号内的文本,也要提取方括号外的文本,直到下一个打开的括号为止,但这不是必需的。

这是我尝试过的正则表达式:

/\[(?<colors>.+)\](?<text>.+?)(?=\[)/gm

这是文本

[F:White,B:Yellow]This is some text[F:Green]more text here
[F:White,B:Yellow]This is a anothr text

在没有积极前瞻(?=\[)的情况下,两个捕获组的行为均不正确。

regex101

1 个答案:

答案 0 :(得分:1)

您可以使用[^][]+模式(negated character class)来匹配[]以外的1个或更多字符:

\[(?<colors>[^][]+)](?<text>[^][]+)

请参见regex demo。请注意,在演示中,我对否定的字符类添加了\n,因为测试是在单个多行字符串上完成的,如果您针对多个单独的独立字符串进行测试,则不需要它。

在某些正则表达式引擎中,您必须在字符类中对[]或两者进行转义,例如在Java,Ruby或Swift / Objective-C(Boost库)中,所以请使用

\[(?<colors>[^\]\[]+)](?<text>[^\]\[]+)

如果text组为空,请将(?<text>[^\]\[]+)替换为(?<text>[^\]\[]*)*将匹配0个或多个匹配项。