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

C# 使用正则表达式提取字符串的一部分,c#,regex,C#,Regex,我有一系列的字符串,我需要提取其中的一部分。我想用正则表达式来实现这一点。这些字符串都具有以下一般形式: content/landdata/files/Albuquerque_123.zip content/landdata/files/Albuquerque_123.zip 除城市名称外,大多数字符串都是静态的。它可以是任何城市的名字 我已经做到了这一点: (?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip) (?!c

我有一系列的字符串,我需要提取其中的一部分。我想用正则表达式来实现这一点。这些字符串都具有以下一般形式:

content/landdata/files/Albuquerque_123.zip content/landdata/files/Albuquerque_123.zip 除城市名称外,大多数字符串都是静态的。它可以是任何城市的名字

我已经做到了这一点:

(?!content/landdata/files/)(?:[A-Za-z_-])*[_][0-9]{1,}(?!\\.zip) (?!content/landdata/files/)(?:[A-Za-z\-])*[\][0-9]{1,}(?!\.zip)
这将给我
Albuquerque_123
,但我很难摆脱
_123

关于“摆脱_123”你能给我一点更多的上下文吗

我对您要求的内容的理解如下:您实际上只是试图从正则表达式的字符串中删除_123,使其成为/content/landdata/files/[City Name]

因此,如果是这种情况,则对_123执行替换

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

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

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

关于“摆脱_123”的问题,你能提供更多的上下文吗

我对您要求的内容的理解如下:您实际上只是试图从正则表达式的字符串中删除_123,使其成为/content/landdata/files/[City Name]

因此,如果是这种情况,则对_123执行替换

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

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

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

这对我来说很有效-将城市放入捕获组(删除?:并将组中的*从你的移动)


这对我很有用-将城市放入捕获组(删除?:并将组内的*从您的组中移出)

您可以使用属性

例如:

    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]);
您可以使用属性

例如:

    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]);
?:
表示不捕获组,所以在您真正想要捕获的组中删除它

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

(?!content/landdata/files/)([A-Za-z_-]*)_[0-9]+(?!\\.zip)
。。。然后您可以只查询匹配的
属性

?:
表示不捕获组,所以将其从您实际想要捕获的组中删除

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

(?!content/landdata/files/)([A-Za-z_-]*)_[0-9]+(?!\\.zip)
。。。然后您可以只查询匹配的
属性


看起来你就快到了。考虑下面的正则表达式…

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

祝你好运

看来你就快到了。考虑下面的正则表达式…

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

祝你好运

是结尾总是
\u 123
,还是仅仅是某个整数?是结尾总是
\u 123
,还是仅仅是某个整数?我几乎可以肯定,\u 123部分不是那样静态的。可能不是,但正如我所说,我只是在寻找更多的上下文。我几乎可以肯定,\u 123部分不是那样静态的。可能不是,但正如我所说,我只是在寻找更多的上下文。
[\u]
可以是简单的
[\u]
可以是简单的