Harte Zeit, herauszufinden, den richtigen regulären Ausdruck für groß geschriebene Wörter
Habe ich eine einfache Anforderung. Wir verwenden die hibernate validation engine, um herauszufinden, ob eine Einschränkung wahr oder falsch ist.
Wahr sein sollte, ein text, wenn alle Wörter beginnt mit einem großgeschriebenen Zeichen.
Es gibt einige Schwierigkeiten:
Worte könnten auch so anfangen
8-Test oder auch 8Test oder auch (Test) oder auch -Test oder etwas vergleichbares
Auch Sie sind in der Regel durch Komma getrennt (oder einen anderen separator):
testen, testen, Testen
ich Erinnere mich nur wollen, stellen Sie sicher, dass die Wörter in der Zeichenfolge beginnt mit Großbuchstaben. Wenn Sie sehen, meine versucht, wahrscheinlich bin ich overcomplicating Dinge.
Hier sind einige Beispiele:
Voraussichtlich auf alle (echten):
- Hydroxyisohexyl 3-Cyclohexen Carboxaldehyde, Benzyl - Testen, Testen, Testen - CI 15510, Methylchloroisothiazolinone, Disodium EDTA - N/A - NA
Voraussichtlich nicht mit allen (falsch):
- hydroxyisohexyl 3-Cyclohexen Carboxaldehyde, Benzyl - Testen, testen, testen - CI 15510, Methylchloroisothiazolinone, Disodium eDTA - na - n/a
Meine versuche wurden, gehen in diese Richtungen:
final String oldregex = "([\\W]*\\b[A-Z\\d]\\w+\\b[\\W]*)+";
final String regex = "([A-Z][\\d\\w]+( [A-Z][-\\d\\w]+)*, )*[A-Z][-\\d\\w]+( [A-Z][-\\d\\w]+)*\\.";'
eigentlich mit "oldregex" option lief ich in einem Infinitiv-Berechnung für einige Texte
Verwenden Sie dies, um zu prüfen, regex: http://gskinner.com/RegExr/ (ohne doppelten backslashes natürlich)
Danke für die Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Regex
Sehen es in Aktion:
Erklärung
Hinweis: können Sie ändern, regex, wenn Sie Ihre Wort-Trennzeichen anders, dann Leerzeichen und Komma. (Ändern Sie zum Beispiel
[^\s,]
zu[^,:-]
oder was auch immer Sie verwenden)[^\s,]
ist falsch, denn es würde ermöglichen, weitere Großbuchstaben nach dem ersten.String regex = "^([^A-Za-z]*[A-Z][A-Za-z]*)+.?$"; //true expected string = "AQUA, CETEARYL ALCOHOL, CETYL ESTERS, BEHENTRIMONIUM CHLORIDE, CETRIMONIUM CHLORIDE, AMODIMETHICONE, TRIDECETH-12, PARFUM, METHYLPARABEN, HEXYL CINNAMAL, LINALOOL, BENZYL SALICYLATE, LIMONENE, LAMINARIA DIGITATA, CHAMOMILLA RECUTITA , ANICOZANTHOS FLAVIDUS, SODIUM BENZ0ATE, PHENOXYETHANOL, ETHYLPARABEN, BUTYLPARABEN, PROPYLPARABEN, P0LYS0RBATE 20, CI 19140, CI 14700."; System.out.println(string.matches(regex));
Acetamide MEA, Glycerin, Sodium Lauriminodiproponiate, Sorbitol, Hydroxylated Lecithin, Carthamus Tinctorius Seed Oil, Helianthus Annuus Seed Oil, Simmondsia Chinensis Seed Oil, Aloe Barbadensis leaf Juice, Simethicone, Avena Sativa Kernel Flour, Yeast Extract CI 15985, Melissa Officinalis Leaf Extract, Humulus Lupulus Extract, Foeniculum Vulgare Seed Extract, Cyclopentasiloxane, Cyclotetrasiloxane, Cyclohexasiloxane, Methylparaben, Propylparaben, Ethylparaben, Diazolidinyl Urea.
"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)*[^A-Za-z]*$"
Getestet
Funktioniert es auf Ihrem Testfall
EDIT:
für performance-Probleme
\.?
Dies ist, was ich wollte: Großbuchstaben Wörter & Zeichen, die java-Spiele
"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)*[^A-Za-z]*$"
Sowas scheint Recht:
Den
\b
s entspricht dem Wort Grenzen. Die[^a-zA-Z]*?
können Präfixe, die nicht Buchstaben. Dann haben wir unsere einzelnen Großbuchstaben mit[A-Z]
, gefolgt von etwas, das nicht einen Großbuchstaben mit[^A-Z,\s]*?
.