2013-11-25 64 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) 

祝你好運!

相關問題