解析“\(|。*?)|)” - 太多了

时间:2011-06-21 05:31:01

标签: regex

parsing "\(|.*?)|)" - Too many )'s.

写这篇文章时我收到了这个错误...

 private static Regex resourceTextsREGEX = new Regex(@"\(|.*?)|)", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase); 

我想要这两件事的正则表达式1- {Text} 2- | Text |我希望能够获得这些比赛并用一些东西取而代之......有人可以帮忙吗?

5 个答案:

答案 0 :(得分:6)

你还没有说过它是什么样的正则表达式,但()是分组运算符的几率非常高。您的表达式与括号不匹配:

    @"\(|.*?)|)"

你可能意味着

    @"(|.*?\)|)"
      ^    ^-- escape
      +-- no escape

...如果您正在尝试创建可能包含实际)的群组,或

    @"\(|.*?\)|\)"
      ^     ^  ^
      +-----+--+--- escapes everywhere

...如果你根本没有尝试创建一个组,只是试图匹配parens。

答案 1 :(得分:2)

您正在逃避(而不是)

答案 2 :(得分:1)

根据你的例子你想要匹配的东西你可能需要这样的东西

[{|](.*?)[|}]

here on Regexr

所以你想匹配
1. {文字}
2. |文字|

我的正则表达式首先匹配

[{|] {|

然后是一个捕获组,使用惰性匹配(.*?)

获取您的文本

最后,结束字符与[|}]匹配,表示}|

答案 3 :(得分:0)

试试这个

 static Regex resourceTextsREGEX = new Regex(@"({)([^}{\|]+)(})|(\|)([^}{\|]+)(\|)", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase); 

这会将{text}|text|{}||{text|

相匹配

答案 4 :(得分:0)

如果我理解正确,你要求正则表达式匹配“{some text here}”和“| some text here |”。

(\{.*?\}|\|.*?\|)应该这样做;它匹配一对花括号内的任何东西(带有非贪婪的量词)或一对垂直条内的任何东西(同样是非贪婪的量词),带有一对分组括号,以便您可以查看或替换匹配。

当然,如果您不想匹配“{}”或“||”你可以简单地用加号(+)替换每个星号(*)。