2012-03-28 74 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; 
} 
相关问题