我有一个像这样的模式
"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 />");
}
}
答案 0 :(得分:7)
如果您想要的只是##中的字符串,那么就不需要正则表达式,只需使用string.Split:
string rawstring="The world is #bright# and beautiful";
string[] tem=rawstring.Split('#');
之后,您只需要从string[] tem
答案 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"];