正则表达式在']'之后找到任何东西之前' ['

时间:2016-02-28 19:34:51

标签: c# regex forms

我有一个正则表达式在文本文件中的方括号之间找到任何东西,这就是:

Regex squareBrackets = new Regex(@"\[(.*?)\]");

我想创建一个正则表达式,基本上是相反的方式来选择方括号中的内容之后的任何内容。所以我想把它们换成圆形?

Regex textAfterTitles = new Regex(@"\](.*?)\[");

但这不起作用,正则表达式让我困惑 - 任何人都可以帮忙吗? 干杯

3 个答案:

答案 0 :(得分:1)

您可以使用lookbehind

var textAfterTiles = new Regex(@"(?<=\[(.*?)\]).*");

如果您有多个此类括号内的群组,则可以将其与lookahead结合使用,例如:

var textAfterTiles = "before [one] inside [two] after"

你想匹配" inside "" after",你可以这样做:

new Regex(@"(?<=\[(.*?)\])[^\[]*");

答案 1 :(得分:1)

相同的\[(.*?)]正则表达式(我只是删除]之前的冗余转义反斜杠),或者更好的正则表达式\[([^]]*)],可用于拆分文字并获取[...]以外的文字(如果与RegexOptions.ExplicitCapture修饰符一起使用):

var data = "A bracket is a tall punctuation mark[1] typically used in matched pairs within text,[2] to set apart or interject other text.";
Console.WriteLine(String.Join("\n", Regex.Split(data,@"\[([^]]*)]",RegexOptions.ExplicitCapture)));

C# demo的输出:

A bracket is a tall punctuation mark
 typically used in matched pairs within text,
 to set apart or interject other text.

RegexOptions.ExplicitCapture标志使模式中的捕获组不捕获,因此捕获的文本不会输出到生成的拆分数组中。

如果您不必保留相同的正则表达式,只需删除捕获组,使用\[[^]]*]进行拆分。

答案 2 :(得分:0)

你可以尝试这个

\]([^\]]*)\[