Wie kann ich Zeichenfolgen mit mehr Ziffern als Nicht-Ziffern mithilfe des regulären Ausdrucks (Muster) in Java identifizieren? Vielen Dank.Java-Regulärer Ausdruck zum Identifizieren von Zeichenfolgen mit mehr Ziffern als Nicht-Ziffern
Antwort
Das ist keine normale Sprache und kann daher nicht von einem Vanille-Regex erfasst werden. Es kann möglich sein, auf jeden Fall, aber es wird mit ziemlicher Sicherheit einfacher, nicht einen regulären Ausdruck zu verwenden:
public static boolean moreDigitsThanNonDigits(String s) {
int diff = 0;
for(int i = 0; i < s.length(); ++i) {
if(Character.isDigit(s.charAt(i))) ++diff;
else --diff;
}
return diff > 0;
}
Ich bin nicht sicher, dass reguläre Ausdrücke hier die beste Lösung wäre.
Sie werden nicht in der Lage sein, eine Regexp zu schreiben, die dies tut. Aber du hast bereits gesagt, dass du Java verwendest, warum nicht ein wenig Code mischen?
public boolean moreDigitsThanNonDigits(String input) {
String nonDigits = input.replace("[0-9]","");
return input.length() > (nonDigits.length * 2);
}
Hallo, kannst du bitte meine Zweifel klären, indem ich java.util.regex pacakgae benutze, kann ich nach irgendwelchen Mustern in den Textdateien oder in irgendeinem Dateiformat suchen? – gmhk
Die verschiedenen java.lang.String 'replace ...' Methoden können Regex bereits akzeptieren. Es ist nicht nötig, eigene Pattern-, Matcher- und andere Instanzen einzubinden. –
Regex allein kann nicht (da sie nichts zählen); aber wenn Sie sie verwenden möchten, dann verwenden Sie einfach zwei Ersatz: eine, die alle Ziffern ausstreicht und eine, die nur sie hält. Vergleichen Sie dann die Stringlängen der Ergebnisse.
natürlich würde ich Daves Antwort lieber verwenden.
Hallo, Könntest du bitte meine Zweifel klären, indem ich java.util.regex pacakgae benutze, kann ich nach irgendwelchen Mustern in den Textdateien oder in irgendeinem Dateiformat suchen? – gmhk
Da reguläre Ausdrücke zum Vergleichen der Muster in einer Zeichenfolge verwendet werden, bezweifle ich dann, ob Google das Musterkonzept durchsucht, um in allen Dateien zu suchen. – gmhk
Google vergleicht FAR mehr als nur Regex mit einigen Dateien. –
Reguläre Ausdrücke sind konzeptionell nicht in der Lage, eine solche Aufgabe zu erfüllen. Sie sind äquivalent zu formalen Sprachen oder (regulären) Automaten. Sie haben keine Vorstellung von Speicher (oder einem Stapel), so dass sie das Auftreten von Symbolen nicht zählen können. Die nächste Erweiterung in Bezug auf die Ausdruckskraft sind Push-Down-Automaten (oder Stapelmaschinen), die kontextfreien Grammatiken entsprechen. Bevor Sie eine solche Grammatik für diese Aufgabe schreiben, wäre eine Methode wie die obige moreDigitsThanNonDigits
geeignet.
Perl- (und Java-) style reguläre Ausdrücke sind aufgrund der "\ number" -Syntax für das Zurückverfolgen einer erfassten Gruppe tatsächlich leistungsfähiger als normale Sprachen. Sie können Sprachen erkennen, die nicht regelmäßig sind. Zum Beispiel kann die Sprache jedes Strings, der zweimal wiederholt wird (was nicht regulär oder sogar kontextfrei ist), durch "(. *) \ 1" erkannt werden. – newacct
Vielen Dank, dass Sie darauf hingewiesen haben! Ihr Beispiel wäre "(. *) \ 1 \ 1", richtig? Aber Längenvergleiche sind immer noch nicht möglich, würde ich annehmen. – miku
Wie bereits erwähnt, ist die betreffende Sprache nicht regulär und kann nicht mit einem regulären Ausdruck erkannt werden.
Ich gebe Ihnen eine weitere Möglichkeit, die Anzahl der Ziffern und die Anzahl der Nicht-Ziffern in einer Zeichenfolge mit Regex zu zählen !!
Mit der Methode String.replaceAll
können Sie alle Nicht-Ziffern in der Eingabezeichenfolge löschen. Die Länge der resultierenden Zeichenfolge entspricht der Anzahl der Ziffern in der Eingabe.
In ähnlicher Weise können Sie alle Ziffern in der Eingabezeichenfolge löschen, und die Länge der resultierenden Zeichenfolge entspricht der Anzahl der Nicht-Ziffern in der Eingabezeichenfolge.
public static boolean test(String str) {
int numDigits = str.replaceAll("\\D","").length();
int numNonDigits = str.replaceAll("\\d","").length();
return numDigits > numNonDigits;
}
- 1. Verwenden von Zeichenfolgen zum Identifizieren von Etikettenobjekten
- 2. regulären Ausdruck für nicht mehr als 2 wiederholt Buchstaben/Ziffern
- 3. Regulärer Ausdruck zum Maskieren von Zeichenfolgen mit Zeichensatzersetzung
- 4. Erlaube mehr als 15 Ziffern in Excel
- 5. consExpr zum Verketten von zwei oder mehr Zeichenfolgen
- 6. identifizieren Zeichen in der richtigen Reihenfolge (Art von regulären Ausdruck) aus einem Array von Zeichenfolgen
- 7. Wie erstelle ich einen regulären Ausdruck, um nicht mehr als 10 Ziffern zu akzeptieren?
- 8. Regulärer Ausdruck für nur 7 Ziffern und 9 Ziffern
- 9. wie große Ganzzahl Daten mehr als 8 Byte oder mehr als 20 Ziffern in C++
- 10. Regex zum Kombinieren von Ziffern
- 11. Ausdruck in Zeichenfolgen umwandeln
- 12. AngularJS: ng-deaktiviert mehr als 1 Ausdruck?
- 13. Verwenden von Substring zum Identifizieren von Datensätzen und Aktualisieren von Datensätzen
- 14. Einleitendes C++: Zeichenfolgen von Ziffern in einer Dateizeile trennen und diese Ziffern summieren
- 15. awk passen mehrere regulären Ausdruck Zeichenfolgen und Ziffern aus einer Zeile
- 16. Wie Regex begrenzen von mehr als einen Ausdruck erregenden
- 17. mit .NET Regex.Replace(), um Ausdruck mehr als einmal zu ersetzen
- 18. Algorithmus zum Identifizieren von "fuzzily-connected" Subgraphen
- 19. Identifizieren Sie nur Zeichenfolgen mit oberen und unteren
- 20. Csvwrite mit Zahlen größer als 7 Ziffern
- 21. identifizieren npm Pakete nicht mehr gepflegt
- 22. Identifizieren, ob die Zeichenfolgen in einer Liste in einer anderen Liste von Zeichenfolgen vorhanden sind
- 23. Regulärer Ausdruck für 2 oder 5 Ziffern
- 24. Verwenden von twitter4j zum Durchsuchen von mehr als 100 Abfragen
- 25. vim Unter ersetzen Ausdruck mit mehr Text
- 26. Speicher von Terminen mit mehr-als-4-stellige Jahren
- 27. zeigen zwei Ziffern max nach floating point ... nur, wenn es sich um eine Fließkommazahl mit mehr als 2 float Ziffern
- 28. höhere Präzision Gleitkomma mit Boost-Lib (höher als 16 Ziffern)
- 29. Regulärer Ausdruck für Zahlenwerte zwischen 1-3 Ziffern?
- 30. Algorithmus zum Konvertieren von römischen Ziffern mit Javascript
ich nicht darauf bestehen, regulären Ausdruck auf verwenden, muss ich irgendwie diese Zeichenfolgen identifizieren. –