如何使用正则表达式查找文档中的所有CamelCased个字词?我只关注领导上骆驼案(即第一个字母大写的骆驼套词)。
答案 0 :(得分:50)
([A-Z][a-z0-9]+)+
假设英语。如果您希望它可以国际化,请使用适当的字符类。这将匹配诸如“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-Za-z0-9]*
它匹配以大写字母开头的字符串,仅包含字母和数字,并且至少包含一个小写字母和至少一个其他大写字母。
答案 1 :(得分:6)
此正则表达式包含数字并实现Google Java Style Guide定义的严格降低驼峰的情况 正则表达式验证。
[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
这是一个说明此正则表达式的snippet。以下元素有效。
xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D
与用于较低驼峰的情况相同的原则,始终是一个起始大写字符。
((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
这是一个说明此正则表达式的片段。以下元素有效。
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D
答案 2 :(得分:5)
Adam Crume的正则表达式很接近,但不匹配,例如IFoo
或HTTPConnection
。不确定其他人,但试试这个:
\b[A-Z][a-z]*([A-Z][a-z]*)*\b
与亚当关于数字的答案相同的注意事项,I18N,强调等等。
您可以测试here。
答案 3 :(得分:5)
解决了我的问题的正则表达式(正确命名将被FitNesse DbFit Web服务识别的目录)是:
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
我反向设计了这些特定的CamelCase规则,它们是:
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
表达式通过我的测试如下:
push_back
答案 4 :(得分:2)
这似乎是这样做的:
/^[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
答案 5 :(得分:1)
([A-Z][a-z\d]+)+
应该为上骆驼案件做伎俩。如果你仍然想要考虑像_IsRunning上层驼峰的情况,你可以添加前导下划线。
答案 6 :(得分:1)
刚刚修改了@ AdamCrume的提议之一:
([A-Z]+[a-z0-9]+)+
这将匹配IFrame
,但不匹配ABC
。其他类似骆驼的单词是匹配的,例如AbcDoesWork
,最重要的是,它还匹配至少没有其他大写字母的简单字词,例如Frame
。
您如何看待这个版本?我错过了一些重要的案例吗?
答案 7 :(得分:0)
([a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[A-Z0-9][a-z0-9]*([A-Z0-9][a-z0-9]*)*)
&#13;
java regex匹配camel case的字符串。