我尝试写一个正则表达式。
考虑这个字符串[converter:mystringornotmystring]
我想得到mystringornotmystring
查看我的错误代码
regEx = new Regex(@"\[((?:.|\n)*?).\]");
foreach (Match m in regEx.Matches(stb.ToString()))
{
myfunction (m.Value);
}
[converter:]是关键字
请帮助我完成我的正则表达式, 感谢
答案 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等网站上测试您的模式。