首页 > 解决方案 > C#中文件名的正则表达式

问题描述

我试图找到一个正则表达式来解析我项目中 .resx 文件的文件名中的两个部分。有一个名为“UiText.resx”的主文件,然后是许多具有约定“UiText.ja-JP.resx”的翻译.resx 文件。我需要后一个字符串中的“UiText”和“ja-JP”,因为我们确实有其他不需要用于 UiText 的 resx 文件(例如,我有一些名为“ExceptionText.resx”的文件)。

我现在使用的模式(有效,之后只需要一些额外的编码)是"(?<=\.)((.*?)(?=\.resx))". 对于上面的示例,“UiText.ja-JP.resx”为我提供了 C# 中“UiText.”、“ja-JP.”、“ja-JP.”、“.resx”的匹配集

当然,我可以只取第一次出现的“ja-JP”。和“UIText”。从这个集合中按摩到我想要的,但我宁愿有一个更干净的“UiText”“ja-JP”并完成它。

我想我可能必须为此至少有两种不同的模式,所以没关系。先感谢您!

标签: c#regex

解决方案


如果我正确理解您的需求,那么您需要“UiText”的主要原因不是因为您对该术语本身有任何价值,而是因为您需要过滤文件。您需要使用的真正术语是“ja-JP”,它会根据您需要的文件进行更改。

如果我是正确的,试试这个正则表达式:

(?<=UiText\.).+(?=\.resx)

在 C# 中使用如下:

var fileName = "UiText.ja-JP.resx";

var result = new Regex(@"(?<=^UiText\.).+(?=\.resx$)").Match(fileName).Value;

一点解释:

  • (?<=^UiText\.) 字符串的开头必须完全以“UiText”开头。
  • .+任意数量的字符(但至少一个)
  • (?=\.resx$)字符串结尾必须以“.resx”结尾

任何不符合您的条件的文件都将为“结果”返回一个空字符串。


推荐阅读