根据模式从字符串中获取特定部分

时间:2015-08-29 08:07:55

标签: c# regex

我有一个这种格式的字符串:

ABCD_EFDG20120700.0.xml

这有一个模式,它有三个部分:

  1. 首先是“_”之前的字符集,“ABCD
  2. 其次是“EFDG
  3. 之后的字符集“_
  4. 第三个是剩余的20120700.0.xml
  5. 我可以拆分原始字符串,并使用此开关从拆分结果中的第二个元素中获取数字:

    \d+
    

    Match m = Regex.Match(splitname[1], "\\d+");
    

    仅返回“20120700”。但我需要'20120700.0'。

    如何获取所需的字符串?

2 个答案:

答案 0 :(得分:1)

您可以扩展正则表达式以查找任意数量的数字,然后再查看句点,然后再搜索任意数量的数字:

Match m = Regex.Match(splitname[1], "\\d+\\.\\d+");

虽然有了这样的正则表达式,你甚至不需要拆分字符串:

string s = "ABCD_EFDG20120700.0.xml";
Match m = Regex.Match(s, "\\d+\\.\\d+");
string result = m.Value;     // result is 20120700.0

答案 1 :(得分:0)

我可以建议您使用一个正则表达式操作,如下所示:

var rgx = new Regex(@"^([^_]+)_([^\d.]+)([\d.]+\d+)\.(.*)$");
var matches = rgx.Matches(input);
if (matches.Count > 0)
{
    Console.WriteLine("{0}", matches[0].Groups[0]);  // All input string
    Console.WriteLine("{0}", matches[0].Groups[1]);  // ABCD
    Console.WriteLine("{0}", matches[0].Groups[2]);  // EFGH
    Console.WriteLine("{0}", matches[0].Groups[3]);  // 20120700.0
    Console.WriteLine("{0}", matches[0].Groups[4]);  // xml
}