2013-11-25 33 views
0

我有一系列字符串,我需要提取它们的一部分。我想用正则表达式来做到这一点。这串都有这样的通用格式:使用正则表达式来提取字符串的一部分

content/landdata/files/Albuquerque_123.zip

大部分的字符串是除了城市名称是静态的。它可以是任何城市名称。

据我已经得到就象这样:

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

哪位能给我Albuquerque_123但我无法摆脱_123的。

+1

它最后总是'_123',还是只是一些整数? –

回答

0

对于“摆脱_123”,您能否给出更多的上下文?

我的你所要求的是如下理解:你基本上只是想使它成为/内容/ landdata /文件/ [城市名称]

所以要去除从regex'd字符串_123如果是这种情况,请在_123上执行替换。

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

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

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

+1

我几乎确定_123部分不是那样的静态。 –

+0

可能不是,但正如我所说,我只是在寻找更多的上下文。 – falconspy

0

这对我的作品 - 把城市的捕获组(删除:从你的移动*组内?)

content\/landdata\/files\/([A-Za-z_-]*)[_][0-9]{1,}(?!\\.zip) 
+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]); 
2

?:意味着非捕获组所以得到你真正想要捕获的组中摆脱它。

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

应该

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

...然后你可以查询本场比赛的Groups财产。

Tested here

+0

奥斯汀,谢谢。这工作完美。 – user3033322

0

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

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

祝你好运!

相关问题