Regex PascalCased单词的正则表达式(又名camelCased,带前导大写字母)
如何查找文档中具有正则表达式的所有单词 如果您不知道Pascal大小写这个词,我只关心引导上驼峰大小写(即第一个字母大写的驼峰大小写单词) 假设是英语。如果您想使其国际化,请使用适当的字符类。这将匹配诸如“This”之类的词。如果您只想匹配至少两个大写字母的单词,只需使用Regex PascalCased单词的正则表达式(又名camelCased,带前导大写字母),regex,search,camelcasing,pascalcasing,Regex,Search,Camelcasing,Pascalcasing,如何查找文档中具有正则表达式的所有单词 如果您不知道Pascal大小写这个词,我只关心引导上驼峰大小写(即第一个字母大写的驼峰大小写单词) 假设是英语。如果您想使其国际化,请使用适当的字符类。这将匹配诸如“This”之类的词。如果您只想匹配至少两个大写字母的单词,只需使用 ([A-Z][a-z0-9]+){2,} 更新: 正如我在评论中提到的,更好的版本是: [A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Z
([A-Z][a-z0-9]+){2,}
更新:
正如我在评论中提到的,更好的版本是:
[A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*
它匹配以大写字母开头、仅包含字母和数字、至少包含一个小写字母和至少一个其他大写字母的字符串
([A-Z][a-z\d]+)+
应该做的技巧,为上骆驼案。如果你还想考虑一些类似于上行驼峰的情况,你可以把它加上下划线。 < P>这似乎是这样做的:
/^[A-Z][a-z]+([A-Z][a-z]+)+/
我已经包括了Ruby单元测试:
require 'test/unit'
REGEX = /^[A-Z][a-z]+([A-Z][a-z]+)+/
class RegExpTest < Test::Unit::TestCase
# more readable helper
def self.test(name, &block)
define_method("test #{name}", &block)
end
test "matches camelcased word" do
assert 'FooBar'.match(REGEX)
end
test "does not match words starting with lower case" do
assert ! 'fooBar'.match(REGEX)
end
test "does not match words without camel hump" do
assert ! 'Foobar'.match(REGEX)
end
test "matches multiple humps" do
assert 'FooBarFizzBuzz'.match(REGEX)
end
end
要求“测试/单元”
正则表达式=/^[A-Z][A-Z]+([A-Z][A-Z]+)+/
类RegExpTest
Adam Crum的正则表达式很接近,但不匹配,例如IFoo
或HTTPConnection
。其他的不太确定,但试试这个:
\b[A-Z][a-z]*([A-Z][a-z]*)*\b
关于数字、I18N、下划线等,与亚当的答案相同
您可以进行测试。刚刚修改了@AdamCrume的一个建议:
([A-Z]+[a-z0-9]+)+
这将匹配IFrame
,但不匹配ABC
。匹配其他驼峰大小写的单词,例如AbcDoesWork
,最重要的是,它还匹配至少没有另一个大写字母的简单单词,例如Frame
你觉得这个版本怎么样?我是否遗漏了一些重要案例?解决我问题的regexp(正确命名FitNesse DbFit web服务将识别的目录)是: 我反向设计了这些特定的CamelCase规则,它们是:
1. First character uppercase alpha
2. Next 1-n characters lowercase alphanumeric
3. Next character (n+1) uppercase alpha
4. Next 0 or more characters lowercase alphanumeric
No consecutive uppercase; no special characters.
Pattern may be repeated, e.g. NoChildLeftBehindSuite9102
表达式通过了我的测试,如下所示:
Camel01C is CamelCase syntax
Camel01c01 is not CamelCase syntax
Camel01C01 is CamelCase syntax
Camel01CC01 is not CamelCase syntax
Camel0a1c1 is not CamelCase syntax
Camel0a1C1 is CamelCase syntax
Camel0ac1b1C1 is CamelCase syntax
CamelC is CamelCase syntax
CamelC1 is CamelCase syntax
CamelCA is not CamelCase syntax
CamelCa1 is CamelCase syntax
CamelCa_1 is not CamelCase syntax
IbsReleaseTestVerificationRegressionSuite is CamelCase syntax
IbsReleaseTestVerificationRegressioNSuite is not CamelCase syntax
IbsReleaseTestVerificationRegressioN is CamelCase syntax
下驼峰箱
此正则表达式包括number并实现了
正则表达式验证
[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D
上驼峰箱
与用于小写的原则相同,始终以大写字母开头
([A-Z][a-z0-9]+)((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
下面是一个演示此正则表达式的片段。以下元素有效
xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D
([a-z0-9]+|[a-z0-9]+[a-z0-9]*.[a-z0-9][a-z0-9]*([a-z0-9][a-z0-9]*)
Adam的更好,而且它通过了我写的所有测试。那么大写字符的子序列或以大写字符结尾的单词呢?如果只想匹配多个大写字符的单词,应该是这样的:([a-Z][a-z0 a-9]*){2,}是的,但这也匹配所有大写单词,这(IMO)不应该被视为驼峰。好的,那么:[A-Z]([A-Z0-9]*[A-Z][A-Z0-9]*[A-Z].[A-Z0-9]*[A-Z][A-Z0-9]*[A-Za-Z0-9]*它匹配以大写字母开头的字符串,只包含字母和数字,并且包含至少一个小写字母和至少一个其他大写字母。问题是这一个也会将Class
检测为驼峰大小写单词。我只想指出,您描述的是PascalCase。CamelCase特别指第一个字母是小写的单词,后面的所有单词都以大写字母开头。显然,PascalCase这是CamelCase。CamelCase的大写正则表达式允许以开头的字符串numbers@HosseinAgha我做了一个更新,以排除倾斜的数字,谢谢你的反馈