c# - 正则表达式:在不同的字符串变体中查找字符串
问题描述
我需要找到一个正则表达式来掌握
81.03
以下字符串变体中的部分(变化,但始终具有结构 XX.XX):
项目/75100/75120/75124/AR1/75124_AR1_HM2_81.03-testing-b405.tgz _
项目/75100/75130/75138/LM1/75138_LM1_HM2_81.03.tgz _
我想出了:
var regex = new Regex("(.*_)(.*?)-");
但这仅匹配第一个示例字符串,而
var regex = new Regex("(.*_)(.*?)(.*\.)");
只匹配第二个字符串。
文件的路径和“-testing...”后缀一样不断变化。
有什么想法可以指出我正确的方向吗?
解决方案
您可以使用
var result = Regex.Match(text, @".*_(\d+\.\d+)")?.Groups[1].Value;
或者,如果字符串可以有更多点+数字部分:
var result = Regex.Match(text, @".*_(\d+(?:\.\d+)+)")?.Groups[1].Value;
请参阅正则表达式演示。
通常,正则表达式将在最后一个_
.
细节
.*
- 除换行符以外的任何 0 个或多个字符,尽可能多_
- 一个_
字符(\d+(?:\.\d+)+)
- 第 1 组:一个或多个数字后跟一个或多个点,后跟一个或多个数字\d+\.\d+
- 一位或多位数字,.
以及一位或多位数字。
推荐阅读
- jobs - Batch job submission failed: I/O error writing script/environment to file
- java - Cognito xray - segment not found issue
- c# - Unity - My script stops working on Editor but works on my builds(android, ios)
- java - 如果文本字段为空,则禁用 AjaxSubmitButton
- http-headers - sec-fetch-site 标头是什么意思?为什么 Origin 标头未定义?
- microsoft-edge - Edge 浏览器不支持 X-UA-Compatible 元标记中定义的文档模式
- scala - Scala: Alternative for deprecated set difference
- redis - Redis:Redisinsight:连接时出错:“添加数据库时出错。请重试”
- c# - 嵌入式字体在 Windows 7 中不支持“常规”样式,但在 Windows 10 中可以
- angularjs - 在 Angular 应用程序中使用服务器呈现的 html 的解决方法