首页 > 解决方案 > 正则表达式:在不同的字符串变体中查找字符串

问题描述

我需要找到一个正则表达式来掌握

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...”后缀一样不断变化。

有什么想法可以指出我正确的方向吗?

标签: c#regex

解决方案


您可以使用

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+- 一位或多位数字,.以及一位或多位数字。

推荐阅读