正则表达式中的一个小组:它有意义吗?

时间:2013-11-14 16:09:27

标签: c# regex regex-group

它有效,但有没有办法删除组“单词”并仍然得到相同的匹配?

string targetString = "5782\tabdikace\t101\r\n5705\tAbdul\t178\r\n5293\tabeceda\t590\r\n5769\tabecední\t114\r\n5651\tÁbel\t232\r\n5750\tÁber\t133\r\n5757\tAbcházie\t126\r\n5624\tAbigail\t259"

var matches = Regex.Matches(targetString, "[0-9]+\t(?<word>[^\t]+)\t[0-9]+");
foreach (Match w in matches)
{
    wordsList.Add(w.Groups["word"].ToString());
}

1 个答案:

答案 0 :(得分:1)

您可以使用positive lookbehind and lookaheads执行此操作。这些检查匹配点之前或之后的模式的文本的存在,而不包括包含和消费匹配中的文本。

等同于你的表达式

(?<=[0-9]+\t)[^\t]+(?=\t[0-9]+)

请注意,这不一定会提供与原始表达式相同的结果。请看以下内容:

Input string                       0\t one \t1\t two \t2\t three \t3
Groups in original version         11111111111         2222222222222
Groups in new version              ...11111...         ...3333333...
. = checked but not consumed                 ...22222...

观察如何,因为loohahead和lookbehind组不消耗/匹配12,只检查它们是否在那里,它们允许值" two "匹配,其中你的原始表达没有。无论你是否想要这个都取决于你。