Frage

Wie finde ich alle PascalCased Wörter in einem Dokument mit einem regulären Ausdruck?

Wenn Sie nicht wissen, das Wort Pascal verrohrt, ich bin nur mit führenden Ober Kamel Fall (das heißt, Kamel verrohrten Worte, in denen der erste Buchstabe aktiviert ist).

War es hilfreich?

Lösung

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

Unter der Annahme, Englisch. Verwenden Sie geeignete Zeichenklassen, wenn Sie es wünschen internationalizable. Dies wird Worte wie „Diese“ entspricht. Wenn Sie nur wollen, um Wörter übereinstimmen mit mindestens zwei Kapitelle, nur verwenden

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

UPDATE: Wie ich in einem Kommentar erwähnt, eine bessere Version ist:

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

Sie paßt Strings, die mit einem Großbuchstaben beginnen, enthalten nur Buchstaben und Zahlen, und mindestens einen Kleinbuchstabe und mindestens einen anderen Großbuchstaben.

Andere Tipps

Nieder Kamel Fall

Diese Regex enthält Anzahl und Geräte strengen Niederstwertprinzip Kamel Fall , wie durch die Google Java Style Guide regex Validierung.

[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
  1. Das erste Zeichen ist Kleinschreibung.
  2. Die folgenden Elemente sind entweder eine einzelne Zahl oder ein oberer durch die untere Gehäuse Zeichen gefolgt Fall Charakter.
  3. Das letzte Zeichen kann ein oberer Fall ein.

Hier ist ein Schnipsel Veranschaulichung dieser regex. Folgende Elemente sind gültig.

xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D

Ober Kamel Fall

Das gleiche Prinzip wie das für niedrigere Kamel Fall mit immer Ausgangsgroßbuchstaben verwendet.

([A-Z][a-z0-9]+)((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?

Hier ist ein Ausschnitt dieses regex darstellt. Folgende Elemente sind gültig.

XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D

Die regexp, dass mein Problem gelöst (richtig Benennen der Verzeichnisse, die von FitNesse DbFit Web-Service erkannt wird) ist:

(^[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]$) 

I Reverse diese besonderen Regeln entwickelt Camelcase, sie sind:

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

Der Ausdruck habe meine Prüfung wie folgt:

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

Adam Crume regex ist in der Nähe, aber zum Beispiel IFoo oder HTTPConnection nicht überein. Nicht sicher über die andere, sondern gibt diesem eine Chance:

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

Die gleichen Einschränkungen wie für Adams Antwort in Bezug auf Stellen, L18N, Unterstrichen etc.

Sie können es testen hier .

Das scheint es zu tun:

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

Ich habe Ruby-Unit-Tests enthalten:

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

Sollte den Trick für oberes Kamel Fall tun. Sie können führende Unterstreichungen, um es auch hinzufügen, wenn Sie noch etwas prüfen wollen, wie Ober Kamel Fall _IsRunning.

modifiziert Nur eine von @ AdamCrume Vorschläge:

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

Dies wird übereinstimmen IFrame, aber nicht ABC. Andere Kamel verrohrten Wörter angepaßt sind, z.B. AbcDoesWork, und vor allem, es passt auch einfache Wörter, die zumindest einen weiteren Großbuchstaben nicht , z.B. Frame.

Was halten Sie von dieser Version? Bin ich einigen wichtigen Fall fehlen?

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

java regex Zeichenfolge auf dem Kamel Fall übereinstimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top