2012-03-28 71 views
0

我正在使用正則表達式來處理字符串操作。如何使用正則表達式類來處理字符串

Source: string value = @"/webdav/MyPublication/Building%20Blocks/folder0/folder1/content_1.xml"; 

    output required: 
      Foldername: folder1 
      content name: content 
      folderpath:/webdav/MyPublication/Building%20Blocks/folder0/folder1/ 

我對此很陌生,任何人都可以說如何使用正則表達式來完成。 謝謝。

+0

你能描述一下你想在文字中使用的規則嗎?一個例子可以用各種方式來解釋。另外,你有什麼嘗試? – svick 2012-03-28 14:18:18

+3

'Path'類可能會有所幫助。 – 2012-03-28 14:20:43

回答

0

你需要似乎是如下的規則:一個「/」字符前面

  • 文件夾名稱=最後的字符串,但不包含「/」字符
  • 內容名稱=最後一個字符串不含有'/'字符,直到(但不包括)'_'或'。'性格
  • FOLDERPATH =相同的文件夾名稱,除了它可以包含「/」字符

假設上述規則 - 你可能想驗證碼:

string value = @"/webdav/MyPublication/Building%20Blocks/folder0/folder1/content_1.xml"; 

var foldernameMatch = Regex.Match(value, @"([^/]+)/[^/]+$"); 
var contentnameMatch = Regex.Match(value, @"([^/_\.]+)[_\.][^/]*$"); 
var folderpathMatch = Regex.Match(value, @"(.*/)[^/]*$"); 
if (foldernameMatch.Success && contentnameMatch.Success && folderpathMatch.Success) 
{ 
    var foldername = foldernameMatch.Groups[1].Value; 
    var contentname = contentnameMatch.Groups[1].Value; 
    var folderpath = folderpathMatch.Groups[1].Value; 
} 
else 
{ 
    // handle bad input 
} 

請注意,您還可以結合這些要成爲一個大的正則表達式,雖然它可以是更麻煩跟隨(如果沒有的話):

var matches = Regex.Match(value, @"(.*/)([^/]+)/([^/_\.]+)[_\.][^/]*$"); 
if (matches.Success) 
{ 
    var foldername = matches.Groups[2].Value; 
    var contentname = matches.Groups[3].Value; 
    var folderpath = matches.Groups[1].Value + foldername + "/"; 
} 
else 
{ 
    // handle bad input 
} 
+0

謝謝Pinny。內容可能包含或不包含'_'。如果它包含,我需要刪除它,否則必須採取它的名字。 – Patan 2012-03-28 17:45:59

+0

如果它不包含下劃線 - 例如'content.xml'是否需要全名或直到'。'字符? – PinnyM 2012-03-28 18:01:21

+0

是的。我想拿到'。'性格特徵。 – Patan 2012-03-29 05:08:38

0

我就這一個傑夫·莫澤同意,但一原來的問題,我相信下面的正則表達式將工作: ^(\/.+\/)(.+?)\/(.+?)\.

編輯:增加的例子。

var value = "/webdav/MyPublication/Building%20Blocks/folder0/folder1/content_1.xml"; 
var regex = Regex.Match(value, @"^(\/.+\/)(.+?)\/(.+?)\."); 

// check if success 
if (regex.Success) 
{ 
    // asssign the values from the regular expression 
    var folderName = regex.Groups[2].Value; 
    var contentName = regex.Groups[3].Value; 
    var folderPath = regex.Groups[1].Value; 
} 
相關問題