使用正则表达式C#获取开始标记和关闭标记之间的字符串

时间:2018-09-03 15:51:20

标签: c# regex

我想传出标签名称,然后输出将使用c#在文本之间开始标签和结束标签

var  mystring="{start}
 {leftimg}<http://frontier-gateway.net/postoffice/images/icons/icon_alert.png>{/leftimg} 
{topimg}<http://frontier-gateway.net/postoffice/images/sent/img_header.png>{/topimg}
{usrname}<Administrator>{/usrname} 
{msg}<This is a test broadcast message.>{/msg}
 {action}<mysite.com/action.php>{/action} 
{end}" 


var a=Regex.Match(mystring, @"{leftimg}\s*(.+?)\s*{/leftimg}").Groups[0].Value;

现在,无论何时开始标签和结束标签,我都会只收到文本。

当前输出:

{leftimg}http://frontier-gateway.net/postoffice/images/icons/icon_alert.png{/leftimg}

我想要这种类型的输出(删除字符串中的开始和结束标签):

http://frontier-gateway.net/postoffice/images/icons/icon_alert.png

1 个答案:

答案 0 :(得分:0)

在C#中,itemId类的第一项返回完全匹配项。要访问第一个捕获组中的内容,您需要使用Data而不是GroupCollection

来自GroupCollection class documentation

  

对于每个匹配项,GroupCollection包含三个Group对象。   第一个对象包含与整个正则表达式匹配的字符串。第二个对象,代表第一个捕获的对象   组,包含产品名称。第三个对象,代表   第二个捕获组,包含商标或注册商标   商标符号。

还有一件事,您需要在“ end tag”中转义正斜杠,即使用.Groups[1]代替.Groups[0] 。我错了。在.NET正则表达式中不必转义正斜杠字符。

以下内容应可以正常工作:

{\/leftimg}