我如何找到所有 帕斯卡卡塞德 文档中的单词带有正则表达式?

如果你不知道 Pascal cased 这个词,我只关心领先 上层驼色箱 (即,第一个字母大写的驼峰式单词)。

有帮助吗?

解决方案

([A-Z][a-z0-9]+)+

假设英语。如果你想让它可国际使用适当的字符类。这将搭配的词语,如“这个”。如果您希望只与至少两个首都匹配的话,只需要使用

([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]*

有匹配以大写字母开头,只包含字母和数字,并且含有至少一个小写字母和至少一个其他大写字母字符串。

其他提示

下驼色箱

该正则表达式包括数量和实现 严格的小驼峰式大小写 定义为 谷歌 Java 风格指南正则表达式验证。

[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
  1. 第一个字符是小写的。
  2. 以下元素可以是单个数字或大写字符后跟小写字符。
  3. 最后一个字符可以是大写字符。

这里有一个 片段 说明这个正则表达式。以下元素有效。

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

这解决了我的问题的正则表达式(正确的命名将由FitNesse的DbFit Web服务被认可的目录)是:

(^[A-Z][a-z0-9]+[A-Z]$)|(^[A-Z][a-z0-9]+([A-Z][a-z0-9]+)+$)|(^[A-Z][a-z0-9]+([A-Z][a-z0-9]+)+[A-Z]$) 

我反向工程这些特定的驼峰规则,它们是:

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

亚当Crume的正则表达式是接近,但将不匹配例如IFooHTTPConnection。不知道别人,而是给这一个尝试:

\b[A-Z][a-z]*([A-Z][a-z]*)*\b

同样的警告作为亚当的回答关于数字,I18N,下划线等。

您可以测试出来这里

这似乎做到这一点:

/^[A-Z][a-z]+([A-Z][a-z]+)+/

我已经包括红宝石单元测试:

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\d]+)+

应达到目的为上骆驼情况。您可以导致下划线添加到它,以及如果你还是要考虑像_IsRunning上骆驼。

只是改性的@ AdamCrume的建议之一:

([A-Z]+[a-z0-9]+)+

这将匹配IFrame,但不是ABC。其他骆驼外装单词的匹配,例如AbcDoesWork,并且最重要的是,的它也匹配不具有至少另一个大写字母简单的字下,例如Frame

你觉得这个版本是什么?我失去了一些重要的情况下?

([a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[A-Z0-9][a-z0-9]*([A-Z0-9][a-z0-9]*)*)

的java正则表达式来在骆驼壳体匹配的字符串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top