Regex для слов PascalCased (иначе camelCased с продвижением прописной буквы)

Как я нахожу все слова PascalCased в документе с регулярным выражением?

Если Вы не знаете слова, Паскаль случился, я только обеспокоен продвижением Верхнего Camel-регистра (т.е. верблюд заключил в корпус слова, в которых первая буква использована для своей выгоды).

31
задан Jonathan Simonney 22 August 2019 в 07:59
поделиться

4 ответа

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

Assuming English. Use appropriate character classes if you want it internationalizable. This will match words such as "This". If you want to only match words with at least two capitals, just use

([A-Z][a-z0-9]+){2,}

UPDATE: Как я упоминал в комментарии, лучшая версия:

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

Она соответствует строкам, которые начинаются с заглавной буквы, содержат только буквы и цифры и содержат как минимум одну строчную букву и как минимум одну заглавную букву.

52
ответ дан 27 November 2019 в 21:53
поделиться

Регулярное выражение Адама Крума близко, но не соответствует, например, IFoo или HTTPConnection . Не уверен насчет других, но попробуйте это:

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

Те же предостережения, что и в ответе Адама относительно цифр, I18N, символов подчеркивания и т. Д.

Вы можете проверить это здесь .

5
ответ дан 27 November 2019 в 21:53
поделиться

Кажется, это помогает:

/^[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
2
ответ дан 27 November 2019 в 21:53
поделиться
([A-Z][a-z\d]+)+

Подойдет для верхнего ящика верблюда. Вы также можете добавить к нему начальные подчеркивания, если хотите рассмотреть что-то вроде _IsRunning upper camel case.

1
ответ дан 27 November 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: