它有效,但有没有办法删除组“单词”并仍然得到相同的匹配?
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());
}
答案 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组不消耗/匹配1
和2
,只检查它们是否在那里,它们允许值" two "
匹配,其中你的原始表达没有。无论你是否想要这个都取决于你。