C#正则表达式包含特定的单词

时间:2017-11-07 09:58:02

标签: c# regex

我尝试写一个正则表达式。 考虑这个字符串[converter:mystringornotmystring] 我想得到mystringornotmystring

查看我的错误代码

regEx = new Regex(@"\[((?:.|\n)*?).\]");
            foreach (Match m in regEx.Matches(stb.ToString()))
            {
                myfunction (m.Value);
            }

[converter:]是关键字

请帮助我完成我的正则表达式, 感谢

1 个答案:

答案 0 :(得分:0)

Cédirc,鉴于你的评论,你在这里有点不清楚:

  

我的字符串可以包含很多“[converter:xxx]”

但是,如果我们只是根据原始问题谈论这个字符串的单个实例,那么您需要的模式比初始尝试更简单。

我假设您不关心关键字是什么,因为您在初始尝试中没有解决这个问题 - 您只想从字符串中提取'参数'。

基本上,你想要的是一个[后跟一些字符(我们不关心什么)然后是:然后是一些字符(我们想要识别)然后是{{1} }。

]

要做的第一件事(正确处理)是匹配一个开头regEx = new Regex(@"\[.*:(.*)\]"); foreach (Match m in regEx.Matches(stb.ToString())) { myfunction (m.Value); } 。这是RegEx中的一个特殊字符,因此需要进行转义 - [

要识别单个字符(当我们不关心字符是什么时),我们使用点(。)。

在我们想要识别多个内容的地方,我们必须告诉正则表达式有多少 - 我们通过应用“基数”来实现这一点。 A *表示零或更多,a +表示一个或多个。还有其他更具体的方式来说明比赛的数量,我将让你留意。还有基数的“贪婪”和“懒惰”版本 - 但让我们坚持手头的问题。

所以 - \[表示零个或多个字符。 而.*表示\[.*后跟零个或多个字符。

然后我们指定[。这是一个匹配的特定字符。

所以 - :表示[\.*:后跟零或多个字符,然后是[

这很简单,对吧?

现在要完成模式,我们需要另一组零或多个字符以及一个结束:(我们将其转义)。

]

我们使用括号\[.*:.*\]来围绕我们想要“捕获”的组。在这种情况下,我们只想捕获第二组零或多个字符:

()

你有它。

查看L.Gutgart给你留下的链接 - 它有很多你将来可能会发现有用的信息。

您还可以在http://regexstorm.net/tester等网站上测试您的模式。