2009-07-30 10 views
2

Der reguläre Ausdruck, den Sie gaben: ^(?:\b\w+\b[\s\r\n]*){1,250}$ um 250 Wörter über mehrere Zeilen zu begrenzen funktioniert, wenn es keine Sonderzeichen hat.Begrenzen Sie die Anzahl der Wörter mit regulärem Ausdruck

Was soll ich tun, wenn ich nach einer Anzahl von Wörtern suchen muss, die auch aus Sonderzeichen bestehen? So etwas wie dieses Beispiel:

--> Hi! i need help with regular expression, please help me. <-- 
+1

exakte Kopie von http://stackoverflow.com/questions/557695/limit-the-number-of-words-in-a-response mit einem regulären Ausdruck? –

Antwort

0

können Sie die {a,b} quantifiers auf jedem Ausdruck verwenden, etwa so:

.{1,256} 
[\d\w_?]{1,567} 
(0x)?[0-9A-F]{1,} 

Also, in Ihrem Fall könnten Sie verwenden:

^(?:\b\w+\b[_!?\s\r\n]*){1,250}$ 

Wo die _!? kann irgendwelche Sonderzeichen sein.

3

Der einfachste Ansatz ist die Wort-Zeichen-Gruppe und begrenzen diese Gruppen auf einen bestimmten Bereich (1-250):

^\W*(\w+(\W+|$)){1,250}$ 
3

Ich bin nicht mit C# vertraut, damit ich die Regex beschreiben.

Methode 1:

Sie suchen im Grunde dafür:

(\b[^\s]+\b){1,250} 

in Java:

\s ist jedes Leerzeichen.

[^\s]+ ist eine Folge von Nicht-Leerzeichen.

\b ist eine Wortgrenze.

Sie können die Regex in C# übersetzen.

Methode 2:

tokenize der Eingabetext in Wörter Leerzeichen getrennt. In Java wird dies durch:

String[] tokens = inputString.split("\\s+"); 

wo die Regex \s+

Jetzt ist die Länge des Arrays zählen können und realisieren Ihre Logik, die Worte über 250

Methode abzulehnen 3:

Definieren Sie ein Muster, um Leerräume als "einfangende Gruppe" zu erfassen.

(\s+) 

Jetzt können Sie die Anzahl der Übereinstimmungen in Ihrem Pattern Matcher mit einer While-Schleife zählen. Dies ist im Wesentlichen ein bisschen wie bei Methode 2, aber ohne die Erstellung des Token-Arrays.

+0

[^ \ s] + kann ersetzt werden mit \ S + – gztomas

1

Ein bisschen spät, um zu antworten, aber keine der Lösungen hier gearbeitet:

^([a-zA-Z0-9] + [^ a-zA-Z0-9] *) {1,8} $

where {1,8} legt fest, wie viele wordt Sie

+0

Können Sie genauer erklären, warum Justen Ludwigs nicht funktioniert hat? Ich habe es probiert und funktioniert gut für mich, aber wenn Sie einen Testfall haben, der scheitert, wäre das sehr hilfreich. http://jsfiddle.net/7PKW7/ – hofnarwillie

+0

Dies ist die einzige Antwort, die auch für mich funktionierte. Ich benutze es in Umbraco. Und nur für den Fall, dass jemand es will, hier ist die modifizierte Version, die Symbole enthält:^([^ \ s] * [\ s] *) {1,8} $ – Owen

Verwandte Themen