查找正则表达式以获取带有文件扩展名的子字符串

Ily*_*lya 3 c# string split

字符串有多种变体:

  1. "txt files `(*.txt)|*.txt|All files (*.*)|*.*`"
  2. "Image Files`|*.jpg;*.jpeg;*.png;`"
  3. "Excel Files `(*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv`"

子字符串可以以任何字符结尾,(space, ',', '.', '|', ';') -无关紧要。

尝试了以下选项:“ [^*].{3,4}(.?);", "[^*]+.(.?);”。

我需要一个正则表达式来获取string[] = {.jpg, .jpeg, ...},最好没有重复的元素。

Eti*_*tel 5

真的需要正则表达式吗?

首先,如果按 分割|,结果中的每个奇数条目都是扩展名列表。然后,您可以再次将其拆分以;获得扩展,然后您可以将其展平为单个序列并修剪起始 的每个元素*。最后,获取其不同的集合并将其放入数组中。

Split这一切都可以通过Linq来完成:

var extensions = filter.Split('|', StringSplitOptions.RemoveEmptyEntries)
                       .Where((x, i) => i % 2 != 0)
                       .SelectMany(x => x.Split(';', StringSplitOptions.RemoveEmptyEntries))
                       .Select(x => x.TrimStart('*'))
                       .Distinct()
                       .ToArray();
Run Code Online (Sandbox Code Playgroud)

从拆分中删除空条目可确保如果您以分隔符结尾,它就会被忽略。

在.NET Fiddle上查看它的实际应用。