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

标签 c# string split

字符串有几种变体:

  1. "txt 文件`(*.txt)|*.txt|所有文件(*.*)|*.*`"
  2. "图像文件`|*.jpg;*.jpeg;*.png;`"
  3. “Excel 文件 `(*.xls, *.xlsx)|*.xls;*.xlsx|CSV 文件 (*.csv)|*.csv`”

子字符串可以以任意字符(空格、','、'.'、'|'、';')结尾——没关系。

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

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

最佳答案

真的需要正则表达式吗?

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

这一切都可以通过 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();

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

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

关于c# - 查找正则表达式以获取具有文件扩展名的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71433303/

相关文章:

javascript - 将文本拆分为多个部分 JavaScript

python - 我如何以这样的方式分割 pandas 数据框,为每个分割值创建一个列

linux - 为什么 linux split 程序对大于 20GB 的大文件有奇怪的行为?

c# - MahApps 使用 MVVM 显示 SimpleChildWindow

c# - 在 C# 中实现 (POCO) 结构属性访问器

c# - 在 monoTouch 中格式化大量数据

javascript - 多行字符串 findIndex()

c - 生成 10 个随机字符

c# - 无法在共享主机 (hostgator) 中读取/写入文件

javascript - 正则表达式:在 Javascript 中检测/删除 ccTLD 通配符?