从结果中的字符串中排除重复项
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"
注:
- 文件名可能有 space,例如
test file.doc
- 项目可以用 space 或逗号或两者分隔
- 字符串可以有引号,也可以没有引号,例如
.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
我正在尝试修改此正则表达式,使其不匹配重复项。
当前正则表达式:
[\""].+?[\""]|[^ ]+
示例字符串:
".doc" "test.xls", ".doc","me.pdf", "test file.doc"
预期结果:
".doc"
"test.xls"
"me.pdf"
但不是
".doc"
"test.xls"
".doc"
"me.pdf"
注:
- 文件名可能有 space,例如
test file.doc
- 项目可以用 space 或逗号或两者分隔
- 字符串可以有引号,也可以没有引号,例如
.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