使用正则表达式提取字符串的一部分

时间:2013-11-25 17:21:43

标签: c# regex

我有一系列字符串,我需要提取它们中的某一部分。我想使用正则表达式来做到这一点。这些字符串都有这种一般形式:

content/landdata/files/Albuquerque_123.zip

除了城市名称,大多数字符串都是静态的。它可以是任何城市名称。

我已经达到了这个目标:

(?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip)

哪会给我Albuquerque_123,但我无法摆脱_123

5 个答案:

答案 0 :(得分:2)

您可以使用Match.Groups属性。

例如:

    var testString = "content/landdata/files/Albuquerque_123.zip";
    var regex = new Regex(@"content/landdata/files/([A-Za-z_-]+)_[0-9]+\.zip");
    Console.WriteLine(regex.Match(testString).Groups[1]);

答案 1 :(得分:2)

?:表示非捕获组,因此请在您实际要捕获的组中删除它。

(?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip)

应该是

(?!content/landdata/files/)([A-Za-z_-]*)_[0-9]+(?!\\.zip)

...然后你可以查询匹配的Groups属性。

Tested here

答案 2 :(得分:0)

你能否就“摆脱_123”提供更多背景信息?

我对你的要求的理解如下:你本质上只是试图从正则表达式字符串中删除_123,使其成为/ content / landdata / files / [城市名]

因此,如果是这种情况,请在_123上执行替换。

public class Example
{
   public static void Main()
   {
      string pattern =  "_123";
      string output = Regex.Replace(input, pattern, "");

      Console.WriteLine("Output: " + result);                             
  }
}

我没有真正测试上面的代码,可能存在问题。可能还有更好的方法来做到这一点。

答案 3 :(得分:0)

这对我有用 - 将城市放入捕获组(删除?:并将组内的*移到你的组内)

content\/landdata\/files\/([A-Za-z_-]*)[_][0-9]{1,}(?!\\.zip)

答案 4 :(得分:0)

看起来你几乎就在那里。考虑以下正则表达式...

(?!content/landdata/files/)(?:[A-Za-z_-])+(?=[_][0-9]{1,}\.zip)

祝你好运!