我有此代码由正则表达式来分割驼峰:与正则表达式分裂驼峰
Regex.Replace(input, "(?<=[a-z])([A-Z])", " $1", RegexOptions.Compiled).Trim();
但是,它不能正确地拆分此:ShowXYZColours
它产生Show XYZColours
代替Show XYZ Colours
我如何获得理想的结果?
我有此代码由正则表达式来分割驼峰:与正则表达式分裂驼峰
Regex.Replace(input, "(?<=[a-z])([A-Z])", " $1", RegexOptions.Compiled).Trim();
但是,它不能正确地拆分此:ShowXYZColours
它产生Show XYZColours
代替Show XYZ Colours
我如何获得理想的结果?
支持Unicode的
(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})
击穿:
(?= # look-ahead: a position followed by... \p{Lu}\p{Ll} # an uppercase and a lowercase ) # | # or (?<= # look-behind: a position after... \p{Ll} # an uppercase ) # (?= # look-ahead: a position followed by... \p{Lu} # a lowercase ) #
使用与您正则表达式分割功能。
编辑:当然,你可以用[a-z]
与[A-Z]
和\p{Ll}
更换\p{Lu}
如果这是你需要的,或者您正则表达式引擎不理解Unicode的类别。使用托默勒格与.NET System.Text.RegularExpressions正则表达式
您可以使用这样的事情:
(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z][a-z])
CODE:
string strRegex = @"(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z][a-z])";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"ShowXYZColours";
string strReplace = @" $1$2";
return myRegex.Replace(strTargetString, strReplace);
OUTPUT:
Show XYZ Colours
创建在所得阵列的0位置的空条目:
Regex.Split("ShowXYZColors", @"(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})")
{string[4]}
[0]: ""
[1]: "Show"
[2]: "XYZ"
[3]: "Colors"
它为驼峰虽然(相对于PascalCase):
Regex.Split("showXYZColors", @"(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})")
{string[3]}
[0]: "show"
[1]: "XYZ"
[2]: "Colors"
这就是失去“颜色” – Sean
“合作”谢谢你提醒我:),我更新了我的答案。 –