c# - 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”并完成它。
我想我可能必须为此至少有两种不同的模式,所以没关系。先感谢您!
解决方案
如果我正确理解您的需求,那么您需要“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”结尾
任何不符合您的条件的文件都将为“结果”返回一个空字符串。
推荐阅读
- c - 致命错误:omp.h:没有使用 arm-unknown-linux-uclibcgnueabi (crosstool-ng) 的文件或目录
- python - 用于在 python 中传输照片的套接字编程
- visualization - 如何使用从一个图中选择的数据的索引,在另一个图中绘制一些东西?
- debian - 无法在 Debian 9 (Stretch) 上安装 php 7.2
- c++ - 了解 std::isnan 的编译结果
- knockout.js - 从 knockout.js 的下拉菜单中过滤可观察数组
- sql - 返回开始日期和结束日期之间月份的完整列表
- html - 纯 CSS 响应式翻转框
- php - 相等比较在php中不起作用
- php - 重力形式 + jQuery + PHP + ajax