带有大写字母的CamelCased单词的正则表达式

时间:2009-07-14 21:59:56

标签: regex search camelcasing

如何使用正则表达式查找文档中的所有CamelCased个字词?我只关注领导上骆驼案(即第一个字母大写的骆驼套词)。

8 个答案:

答案 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])?
  1. 第一个字符是小写字母。
  2. 以下元素是单个数字或大写字母,后跟小写字符。
  3. 最后一个字符可以是大写字母。
  4. 这是一个说明此正则表达式的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的正则表达式很接近,但不匹配,例如IFooHTTPConnection。不确定其他人,但试试这个:

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

&#13;
&#13;
([a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[A-Z0-9][a-z0-9]*([A-Z0-9][a-z0-9]*)*)
&#13;
&#13;
&#13;

java regex匹配camel case的字符串。