2017-04-27 52 views
1

下面的正则表达式拆分大写字母串(如:GetDatabaseIDE成为Get Database IDE正则表达式的大写字母和那些缩略词号码拆分

Regex.Matches("GetDatabaseIDE", @"([A-Z]+)([^A-Z])*").Cast<Match>().Select(m => m.Value); 

这怎么可能正则表达式模式改为包括数字和依旧促进当前的回报模式? (如:GetDatabase2FA应该返回Get Database 2FA

编辑:

所需正则表达式模式应该分裂串像下面..

2FAGetDatabase ---> 2FA Get Database 

Get2FADatabase ---> Get 2FA Database 

GetDatabase2FA ---> Get Database 2FA 

我的解决方案:

public static string ToSentence(this string text) 
{ 
    string pattern; 
    if (text.Any(char.IsDigit)) 
    { 
     pattern = @"(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z])(?=[0-9])"; 
     return string.Join(" ", Regex.Split(text, pattern)); 
    } 
    else 
    { 
     pattern = @"([A-Z]+)([^A-Z])*"; 
     return string.Join(" ", Regex.Matches(text, @"([A-Z]+)([^A-Z])*").Cast<Match>().Select(m => m.Value)); 
    } 
} 

回答

1

这个怎么样?

var pattern = @"(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z])(?=[0-9])"; 
Regex.Split("2FAGetDatabase", pattern); 
//2FA Get Database 
Regex.Split("Get2FADatabase", pattern); 
//Get 2FA Database 
Regex.Split("GetDatabase2FA", pattern); 
//Get Database 2FA 
Regex.Split("GetIDEDatabase2FA", pattern); 
//Get IDE Database 2FA 
相关问题