2017-06-20 7 views
3

So habe ich jetzt das folgende Regex-Muster, das es mir erlaubt, eine Zeichenfolge mit 9 Zeichen zu erkennen, die aufeinanderfolgend gleich sind.Regex erkennt jedes wiederholte Zeichen aber mit optionalem Leerzeichen zwischen

/^.*(\S)\1{9,}.*$/ 

Das funktioniert perfekt mit einem String wie folgt aus: this a tesssssssssst jedoch möchte ich für sie auch eine Zeichenfolge wie folgt ermitteln zu: this a tess sss ssssst (gleiche Anzahl der Zeichen wiederholt, jedoch mit optionalen Leerzeichen)

Beliebig Ideen?

+0

Was passiert, wenn mehrere Leerzeichen zwischen zwei 's's sind? – revo

+0

@revo Yeah jede Menge Whitespace –

Antwort

3

Sie müssen die Rückreferenzierung in eine Gruppe setzen und einen optionalen Platz in der Gruppe hinzufügen:

^.*(\S)(?: ?\1){9,}.*$ 

Siehe regex demo. Wenn mehr als 1 Platz dazwischen sein kann, ersetzen Sie ? durch *.

Der .*$ Teil wird nur benötigt, wenn Sie die ganze Zeilenübereinstimmung erhalten müssen, für Methoden, die teilweise Übereinstimmungen erlauben, können Sie ^.*(\S)(?: ?\1){9,} verwenden.

Wenn ein Leerzeichen gemeint ist, ersetzen Sie das Leerzeichen durch \s im Muster.

+0

Schön danke! –

+0

Weitere Frage, wenn Sie könnten: Erkennen einer beliebigen Zeichenkombination wiederholt 9 oder mehr Mal mit Leerzeichen zwischen? –

+0

Geben Sie bitte ein Beispiel für reale Daten und die erwartete Ausgabe an. –

0

Sie können auf diese Weise mehr als ein einzelnes Zeichen prüfen.
Es ist nur durch die Anzahl der verfügbaren Erfassungsgruppen begrenzt.

Dieser prüft auf 1 - 3 Zeichen.

(\S)[ ]*(\S)?[ ]*(\S)?(?:[ ]*(?:\1[ ]*\2[ ]*\3)){9,} 

http://regexr.com/3g709

# 1-3 Characters 
(\S)      # (1) 
[ ]* 
(\S)?      # (2) 
[ ]* 
(\S)?      # (3) 
# Add more here 

(?: 
     [ ]* 
     (?: \1 [ ]* \2 [ ]* \3) 
     # Add more here 
){9,} 
Verwandte Themen