2009-08-06 10 views

Antwort

114

Wenn Sie nur Linien beginnend mit Stopp Verwendung

^stop 

passen wünschen Wenn Sie mit dem Wort beginnen Linien entsprechen wollen gefolgt von einem Leerzeichen aufhören

^stop\s 

Oder, wenn Sie möchten Übereinstimmungen, die mit dem Wort stop beginnen, aber gefolgt von einem Leerzeichen oder einem anderen Nichtwortzeichen, das Sie verwenden können (Ihr Regexgeschmack erlaubt)

Auf der anderen Seite, was folgt, entspricht ein Wort am Anfang eines Strings auf den meist Regex-Varianten (in diesen Aromen \ w das Gegenteil von \ W entspricht)

^\w 

Wenn Ihr Geschmack das nicht hat \ w Verknüpfung können Sie

^[a-zA-Z0-9]+ 

Seien Sie vorsichtig verwenden, die dieses zweite Idiom nur Buchstaben und Zahlen übereinstimmen, überhaupt kein Symbol.

Ihre regex Geschmack manuell prüfen zu wissen, welche Verknüpfungen erlaubt sind und was sie genau übereinstimmen tun (und wie gehen sie mit Unicode.)

+14

+1 für die Verallgemeinerung Ihrer Antwort. Ich würde gerne mehr davon auf Stack Overflow sehen. Macht es meiner Meinung nach zu einer besseren Lernquelle. – Jim

6
/stop([a-zA-Z])+/ 

Wird jede Stoppwort übereinstimmen (Stopp, gestoppt, Stoppen, etc)

wenn Sie jedoch wollen erst am Anfang einer Zeichenfolge gefunden, die "Stop"

tun: D

+2

Dies wird übereinstimmen "nicht aufhören zu gehen" –

+0

Ich habe die Frage erneut gelesen und meine Antwort geändert: D – Mez

+1

Dies entspricht nicht stop123 oder stop ,. –

46

Try this:

/^stop.*$/ 

Erläuterung:

  • / charachters den regulären Ausdruck begrenzen (d sie sind nicht Teil der Regex per se)
  • ^ bedeutet Spiel am Anfang der Zeile
  • . gefolgt von * bedeutet Übereinstimmung mit einem beliebigen Zeichen (.), Eine beliebige Anzahl von Zeiten (*)
  • $ bedeutet, bis zum Ende der Zeile

Falls Sie ein Leerzeichen stoppen erzwingen möchten folgen, können Sie die RegEx wie so ändern könnte:

/^stop\s+.*$/ 
  • \ s bedeutet jedes Leerzeichen
  • + f ach die \ s bedeutet, dass es mindestens ein Leerzeichen folgt nach dem Stoppwort

Hinweis sein muss: Beachten Sie außerdem, dass der RegEx erfordert vor, dass das Stoppwort durch ein Leerzeichen folgen! So wäre es nicht eine Zeile passen, die nur enthält: Anschlag

+2

. * $ Ist redundant. – Mez

+0

Nicht alle Sprachen verwenden foreslashes, um Regexes zu begrenzen. – JAB

+1

@Cat Megex: Genau deshalb habe ich die Erklärung hinzugefügt. Wenn Ihre Sprache etwas anderes verwendet, um die Regex zu begrenzen, ersetzen Sie das/durch das richtige Zeichen –

6

Wenn Sie etwas übereinstimmen soll, die mit „Stop“ startet mit „aufhören“, „Stop“ und „Anhalten“ Verwendung:

^stop 

Wenn Sie das Wort übereinstimmen soll durch irgendetwas gefolgt zu stoppen, wie in „aufhören“, „Stop diese“, aber nicht „gestoppt“ und „anhalten“ Verwendung nicht:

^stop\W 
0

ich würde raten von einem einfachen regulären Ausdruck ab ch zu diesem Problem. Es gibt zu viele Wörter, die Teilzeichen anderer Wörter sind, und Sie werden sich wahrscheinlich selbst verrückt machen, wenn Sie versuchen, die einfacheren Lösungen, die bereits bereitgestellt wurden, zu überarbeiten.

Sie wollen mindestens einen naiven Stammalgorithmus (versuchen Sie den Porter-Stemmer; es gibt freien Code in den meisten Sprachen), um zuerst Text zu verarbeiten. Bewahren Sie diesen verarbeiteten Text und den vorverarbeiteten Text in zwei separaten space-Split-Arrays auf. Stellen Sie sicher, dass jedes nicht alphabetische Zeichen auch einen eigenen Index in diesem Array erhält. Was auch immer für eine Liste von Wörtern Sie filtern, stemmen Sie sie auch.

Der nächste Schritt wäre, die Array-Indizes zu finden, die zu Ihrer Liste der Wortstoppwörter passen. Entfernen Sie diese aus dem nicht verarbeiteten Array, und schließen Sie sie dann erneut an.

Dies ist nur ein wenig komplizierter, wird aber viel zuverlässiger ein Ansatz sein. Wenn Sie Zweifel an dem Wert eines NLP-orientierten Ansatzes haben, sollten Sie einige Nachforschungen zu clbuttic mistakes anstellen.

11

Wenn Sie alles nach einem Wort passen stoppen ein nicht nur am Anfang der Zeile können Sie verwenden: \bstop.*\b - word followed by line

Word till the end of string

Oder wenn Sie das Wort in der Zeichenfolge übereinstimmen soll verwenden \bstop[a-zA-Z]* - only the words starting with stop

Only the words starting with stop

Oder der Beginn der Linien mit Stop ^stop[a-zA-Z]* nur für das Wort - first word only
Die ganze Linie ^stop.*-first line of the string only

Und wenn Sie jede Zeichenfolge beginnend mit Stopp inklusive Zeilenumbrüche übereinstimmen sollen verwenden: /^stop.*/s-multiline string starting with stop

0

Wenn Sie das Wort mit „beginnen sollen aufhören ", können Sie das folgende Muster verwenden. "^ stop. *"

Dies entspricht Wörtern, die mit stop beginnen, gefolgt von irgendetwas.

+1

Konnte du verwendest nicht einfach '"^stop "'? –

+0

Kommt drauf an. Während wir in der Java-Syntax sprechen, können wir das Pattern- und Matcher-Objekt für die Verwendung von regex oder die direkte Verwendung der .matches() -Methode mit dem String-Objekt verwenden. Sie unterscheiden sich im Ergebnis, wie unten: '' code' String line = "stopped"; '' Besaitungsbild = "^ stop"; '' Pattern r = Pattern.compile (Muster); '' Matcher m = r.matcher (line); ' ' System.out.println (m.find()); // druckt true' 'System.out.println (line.matches (pattern)); // druckt false' –

+0

Dies passt nur, wenn das Wort am Anfang der Zeile steht. Wenn Wörter, die mit "stop" beginnen, in der Mitte der Zeile oder am Ende stehen, stimmt diese Regex nicht überein. @StephenRauch Wenn Sie [a-z] * weglassen, würden Sie keine Wörter wie "stoppen" im Ganzen erhalten. Im Fall des "Stoppen" erhalten Sie "Stop" und "Ping" würde fehlen. –

1

Wie @SharadHolani sagte. Dies stimmt nicht mit jedem Wort überein, beginnend mit "Stopp"

. Nur wenn es am Anfang einer Zeile steht wie "stop going". @Waxo gab die richtige Antwort:

Dieser ist leicht besser, wenn Sie ein beliebiges Wort mit „Anschlag“ beginnen passen wollen und enthält nichts als Briefe von A bis Z.

\bstop[a-zA-Z]*\b 

Dies würde alle

Stoppen (3)

(1)

Anschlag Zufalls (2)

Anschlag passen wollen bis Anschlag (4)

bitte Anschlag (5)

Aber

/^stop[a-zA-Z]*/ 

würde nur Spiel (1) bis (3), aber nicht (4) & (5)

Verwandte Themen