从结果中的字符串中排除重复项

Excluding duplicates from a string in results

我正在尝试修改此正则表达式,使其不匹配重复项。

当前正则表达式:

[\""].+?[\""]|[^ ]+

示例字符串:

".doc" "test.xls", ".doc","me.pdf", "test file.doc"

预期结果:

".doc"
"test.xls"
"me.pdf"

但不是

".doc"
"test.xls"
".doc"
"me.pdf"

:

  1. 文件名可能有 space,例如test file.doc
  2. 项目可以用 space 或逗号或两者分隔
  3. 字符串可以有引号,也可以没有引号,例如.doc".doc".

在 C# 中,您可以使用简单的正则表达式提取所有有效匹配项并使用 .Distinct() 仅保留唯一值。

正则表达式很简单:

"(?<ext>[^"]+)"|(?<ext>[^\s,]+)

查看 regex demo,您只需要 "ext" 组值。

详情

  • "(?<ext>[^"]+)" - ",(组 "ext")除 " 之外的任何 1+ 个字符,然后是 "
  • | - 或
  • (?<ext>[^\s,]+) - (group "ext") 除空格和逗号外的 1+ 个字符

C# code 片段:

var text = "\".doc\" \"test.xls\", \".doc\",\"me.pdf\", \"test file.doc\".doc \".doc\"";
Console.WriteLine(text); // => ".doc" "test.xls", ".doc","me.pdf", "test file.doc".doc ".doc"
var pattern = "\"(?<ext>[^\"]+)\"|(?<ext>[^\s,]+)";
var results = Regex.Matches(text, pattern)
        .Cast<Match>()
        .Select(x => x.Groups["ext"].Value)
        .Distinct();
Console.WriteLine(string.Join("\n", results));

输出:

.doc
test.xls
me.pdf
test file.doc