【发布时间】:2017-04-27 13:59:51
【问题描述】:
以下正则表达式模式将字符串拆分为大写字母(例如,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));
}
}
【问题讨论】: