Reguliere expressie om een tekenreeks te matchen die begint met een specifiek woord

Hoe maak ik een reguliere expressie die overeenkomt met een woord aan het begin van een tekenreeks. We zoeken naar stopaan het begin van een tekenreeks en alles kan erop volgen.

De uitdrukking moet bijvoorbeeld overeenkomen met:

stop
stop random
stopping

Bedankt.


Antwoord 1, autoriteit 100%

Als u alleen regels wilt matchen die beginnen met stop, gebruik dan

^stop

Als u regels wilt matchen die beginnen met het woord stop gevolgd door een spatie

^stop\s

Of, als u regels wilt matchen die beginnen met het woord stop maar gevolgd worden door een spatie of een ander niet-woordteken dat u kunt gebruiken (als uw regex-smaak het toelaat)

^stop\W

Aan de andere kant komt wat volgt overeen met een woord aan het begin van een tekenreeks op de meeste regex-smaken (in deze smaken komt \w overeen met het tegenovergestelde van \W)

^\w

Als uw smaak niet de \w-snelkoppeling heeft, kunt u

^[a-zA-Z0-9]+

Pas op dat dit tweede idioom alleen overeenkomt met letters en cijfers, geen enkel symbool.

Raadpleeg je regex-smaakhandleiding om te weten welke sneltoetsen zijn toegestaan en wat ze precies overeenkomen (en hoe gaan ze om met Unicode.)


Antwoord 2, autoriteit 45%

Probeer dit:

/^stop.*$/

Uitleg:

  • /tekens begrenzen de reguliere expressie (d.w.z. ze maken niet per se deel uit van de Regex)
  • ^betekent match aan het begin van de regel
  • .gevolgd door *betekent overeenkomen met een willekeurig teken (.), een willekeurig aantal keren (*)
  • $betekent aan het einde van de regel

Als u wilt dat die stop wordt gevolgd door een spatie, kunt u de RegEx als volgt wijzigen:

/^stop\s+.*$/
  • \sbetekent een willekeurig witruimteteken
  • +na \sbetekent dat er minimaal één spatie moet volgen na het stopwoord

Opmerking: houd er ook rekening mee dat de bovenstaande RegEx vereist dat het stopwoord wordt gevolgd door een spatie! Het zou dus niet overeenkomen met een regel die alleen bevat: stop


Antwoord 3, autoriteit 19%

Als u iets wilt zoeken na een woordstop en niet alleen aan het begin van de regel, kunt u het volgende gebruiken: \bstop.*\bwoord gevolgd door regel

Of als u het woord in de tekenreeks wilt matchen, gebruikt u \bstop[a-zA-Z]*alleen de woorden die beginnen met stop

Of het begin van regels met stop ^stop[a-zA-Z]*voor alleen het woord – alleen eerste woord
De hele regel ^stop.*alleen de eerste regel van de tekenreeks

En als je elke string die begint met stop inclusief nieuwe regels wilt matchen, gebruik dan: /^stop.*/stekenreeks met meerdere regels beginnend met stop


Antwoord 4, autoriteit 11%

Zoals @SharadHolani zei. Dit komt niet overeen met elk woord dat begint met “stop

. Alleen als het aan het begin van een regel staat, zoals “stop met gaan“.
@Waxo gaf het juiste antwoord:

Deze is ietsbeter, als je een woord wilt zoeken dat begint met “stop” en niets anders bevat dan letters van A tot Z.

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

Dit komt overeen met alle

stop(1)

stopwillekeurig (2)

stoppen(3)

wil stoppen(4)

alsjeblieft stop(5)

Maar

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

zou alleen overeenkomen met (1) tot (3), maar niet met (4) & (5)


Antwoord 5, autoriteit 4%

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

Komt overeen met elk stopwoord (stop, gestopt, stoppen, enz.)

Als u echter alleen “stop” aan het begin van een tekenreeks wilt laten overeenkomen

/^stop/

zal doen 😀


Antwoord 6, autoriteit 3%

Als je iets wilt matchen dat begint met “stop”, inclusief “stop gaan”, “stop” en “stoppen”, gebruik dan:

^stop

Als u het woordwilt laten overeenkomen met stop gevolgd door iets zoals in “stop met gaan”, “stop dit”, maar niet “gestopt” en niet “stoppen” gebruik:

^stop\W

Antwoord 7

Als u wilt dat het woord met “stop” begint, kunt u het volgende patroon gebruiken.
“^stop.*”

Dit komt overeen met woorden die beginnen met stop gevolgd door iets.


Antwoord 8

Ik zou een eenvoudige reguliere expressiebenadering van dit probleem afraden. Er zijn te veel woorden die substrings zijn van andere niet-verwante woorden, en je zult jezelf waarschijnlijk gek maken door de eenvoudigere oplossingen die al zijn geboden te overdrijven.

U wilt op zijn minst een naïef stamalgoritme (probeer de Porter-stemmer; er is gratis code beschikbaar in de meeste talen) om tekst eerst te verwerken. Bewaar deze verwerkte tekst en de voorverwerkte tekst in twee afzonderlijke, door spaties gesplitste arrays. Zorg ervoor dat elk niet-alfabetisch teken ook een eigen index krijgt in deze array. Welke lijst met woorden je ook filtert, stem ze ook af.

De volgende stap zou zijn om de array-indexen te vinden die overeenkomen met uw lijst met ‘stop’-woorden met stem. Verwijder die uit de onverwerkte array en voeg ze vervolgens opnieuw toe op spaties.

Dit is alleen iets ingewikkelder, maar zal een veel betrouwbaardere benadering zijn. Als je twijfels hebt over de waarde van een meer NLP-georiënteerde benadering, wil je misschien wat onderzoek doen naar clbuttische fouten.

Other episodes