我有以下文字:
<i><b>It is noticeably faster.</b></i> <i><b>They take less disk space.</i>
以下正则表达式:
(</[b|i|u]>)+(\s*)(<[b|i|u]>)+
匹配会创建以下组:
0: </b></i> <b><i>
1: </i>
2: spaces
3: <b>
如何更改我的正则表达式,以便创建类似的组:
0: </b></i> <b><i>
1: </b>
2: </i>
3: spaces
4: <i>
3: <b>
答案 0 :(得分:4)
我怀疑你已经得到了你需要的东西 - 你只需要枚举每组的捕获量。这是一个示例程序,显示了实际操作:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
string text =
"<i><b>It is noticeably faster.</b></i> <i><b>They take less disk space.</i>";
Regex pattern = new Regex(@"(</[b|i|u]>)+(\s*)(<[b|i|u]>)+");
Match match = pattern.Match(text);
foreach (Group group in match.Groups)
{
Console.WriteLine("Next group:");
foreach (Capture capture in group.Captures)
{
Console.WriteLine(" " + capture.Value);
}
}
}
}
答案 1 :(得分:1)
你做不到。一个组只能拥有一个东西,即使它在同一个匹配中因为+,*或类似而击中多个东西。当然,您可以在该组中使用正则表达式或类似物来获取单个项目。
因此,每场比赛每组只有一件事。
答案 2 :(得分:0)
您只能更改正则表达式,以便匹配空格后面的每个结束标记和每个结束标记:
((?:</[biu]>)+)(\s*)((?:<[biu]>)+)
这将匹配
0: </b></i> <i><b>
1: </b></i>
2: _
3: <i><b>
答案 3 :(得分:0)
我发现这个网页http://regexlib.com/RETester.aspx对于测试RegEx表达式非常有用。它可以使用.Net引擎或客户端引擎来评估VBScript或JavaScript。
我喜欢这个来自RegExLib的在线工具,因为它可以在我所使用的任何机器上使用,但Jackson在UltraPico.com上的Expresso应用程序,杰克逊在对原始问题帖子的评论中建议,看起来不错。不仅仅是测试,它有助于构建您的RegEx。我刚刚下载了它,我将尝试一下。
现在,如果只有一个工具可以读取复杂的正则表达式,并提供一个自然的语言描述它应该做什么。特别是如果您可以指示您正在解析HTML或其他类型的数据格式,那么描述将根据使用情况进行定制。 :)