1

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

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());
}
4

1 回答 1

1

您可以通过积极的lookbehind 和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 组不消耗/匹配1and 2,只检查它们是否存在,它们允许" two "匹配值,而您的原始表达式没有。你是否想要这个取决于你。

于 2013-11-14T16:21:41.787 回答