c# - 用正则表达式拆分 CamelCase

标签 c# regex camelcasing

我有这段代码可以通过正则表达式拆分 CamelCase:

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
)                 #

与您的正则表达式拆分函数一起使用。


编辑:当然,您可以将 \p{Lu} 替换为 [A-Z] 并将 \p{Ll} 替换为 [a-z] 如果这是您的需要,或者您的正则表达式引擎不理解 Unicode 类别。

关于c# - 用正则表达式拆分 CamelCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21326963/

相关文章:

正则表达式允许 "single 0"或“任何其他位数?

Java:从一个字符串值替换多个字符串模式

javascript - 正则表达式如何检查消息不为空

python - 优雅的 Python 函数将 CamelCase 转换为 snake_case?

php - 在跳过缩写的同时将驼峰大小写格式化为可读的 PHP

C# 将一个类的所有成员设置为公共(public)

c# - 将字符串转换为 DateTimeOffset 的最佳方法?

c# - .Net Matrix3D Transform() 究竟做了什么/为什么我得到 "- infinity"?

c# - 代码分析,迷失在CA1709和CA1704之间

c# - 处理组件