检索特定模式内的值

时间:2010-09-17 14:18:45

标签: c# regex .net-2.0

我有一个像这样的模式

"The world is #bright# and #beautiful#"

我需要在## ..任何指针

中检索字符串“bright”,“beautiful”

我的解决方案(感谢Bolu):

string s = "The world is #bright# and #beautiful#";
    string[] str = s.Split('#');
    for (int i = 0; i <= str.Length - 1; i++)
    {
        if (i % 2 != 0)
        {
            Response.Write(str[i] + "<br />");
        }
    }

4 个答案:

答案 0 :(得分:7)

如果您想要的只是##中的字符串,那么就不需要正则表达式,只需使用string.Split:

string rawstring="The world is #bright# and beautiful";
string[] tem=rawstring.Split('#');

之后,您只需要从string[] tem

获取偶数项(索引:1,3,5 ......)

答案 1 :(得分:4)

只要你不能拥有嵌套的#...#序列,#([^#]+)#就可以了,并且会将#的内容作为第一个backreference捕获。

说明:

#        match a literal # character
(        open a capturing group
  [^     open a negated character class
     #   don't match # (since the character class is negated)
  ]+     close the class, match it one or more times
)        close the capturing group
#        match a literal # character

答案 2 :(得分:3)

查看Match对象:

var match = Regex.Match(yourstring, @"The world is #(.*)# and beautiful")
var bright = match.Groups[1]

当你的字符串中有两个以上的#时,这会崩溃。然后你可能想做一个非贪婪的比赛。这可以使用正则表达式“#(.*?)#”来完成。这将匹配两个锐利之间的最短字符串,并且仍然具有第一组中的内容。

答案 3 :(得分:2)

您需要通过在圆括号Capturing Group中包装要捕获的部分来设置(),并可选择指定捕获的名称:

Regex r = new Regex(@"#([^#]+?)#");

可以使用以下代码访问:

Match m = r.Match("The world is #bright# and beautiful");
string capture = m.Groups[1];

或者使用命名参数:

Regex r = new Regex(@"#(?<mycapture>[^#]+?)#");

可以使用以下代码访问:

Match m = r.Match("The world is #bright# and beautiful");
string capture = m.Groups["mycapture"];