字符串有多种变体:
"txt files `(*.txt)|*.txt|All files (*.*)|*.*`""Image Files`|*.jpg;*.jpeg;*.png;`""Excel Files `(*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv`"子字符串可以以任何字符结尾,(space, ',', '.', '|', ';') -无关紧要。
尝试了以下选项:“ [^*].{3,4}(.?);", "[^*]+.(.?);”。
我需要一个正则表达式来获取string[] = {.jpg, .jpeg, ...},最好没有重复的元素。
你真的需要正则表达式吗?
首先,如果按 分割|,结果中的每个奇数条目都是扩展名列表。然后,您可以再次将其拆分以;获得扩展,然后您可以将其展平为单个序列并修剪起始 的每个元素*。最后,获取其不同的集合并将其放入数组中。
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上查看它的实际应用。