Expressão regular para corresponder à string começando com “stop”

97

Como faço para criar uma expressão regular para corresponder a uma palavra no início de uma string. Estamos procurando uma correspondência stopno início de uma string e qualquer coisa pode segui-la.

Por exemplo, a expressão deve corresponder a:

stop
stop random
stopping

Obrigado.

Brad Mace
fonte

Respostas:

184

Se você deseja combinar apenas as linhas que começam com interromper o uso

^stop

Se você deseja combinar as linhas que começam com a palavra stop seguida por um espaço

^stop\s

Ou, se você deseja combinar as linhas que começam com a palavra stop, mas seguidas por um espaço ou qualquer outro caractere que não seja uma palavra que você possa usar (se o seu tipo de regex permitir)

^stop\W

Por outro lado, o que se segue corresponde a uma palavra no início de uma string na maioria dos sabores regex (nestes sabores \ w corresponde ao oposto de \ W)

^\w

Se o seu sabor não tiver o atalho \ w, você pode usar

^[a-zA-Z0-9]+

Fique atento, pois esse segundo idioma irá corresponder apenas a letras e números, sem nenhum símbolo.

Verifique seu manual de sabor regex para saber quais atalhos são permitidos e o que exatamente eles correspondem (e como eles lidam com Unicode).

Vinko Vrsalovic
fonte
27
1 para generalizar sua resposta. Eu adoraria ver mais disso no Stack Overflow. Torna-se um recurso de aprendizagem melhor na minha opinião.
Jim
Como torná-lo sem distinção entre maiúsculas e minúsculas, ou seja, corresponder a Stop ou stop ou sTop?
Elton Garcia de Santana
Depende do seu idioma ... Compatível com Perl pode usar o modificador I. / regex / i .NET RegexOptions.IgnoreCase e assim por diante
Vinko Vrsalovic
Não se esqueça ^stop\b, o que permitiria qualquer limite, incluindo o fim da linha
Mad Physicist,
80

Experimente isto:

/^stop.*$/

Explicação:

  • / charachters delimitam a expressão regular (ou seja, eles não fazem parte do Regex per se)
  • ^ significa coincidir com o início da linha
  • . seguido por * significa corresponder a qualquer caractere (.), qualquer número de vezes (*)
  • $ significa até o fim da linha

Se você quiser fazer com que a parada seja seguida por um espaço em branco, você pode modificar o RegEx da seguinte maneira:

/^stop\s+.*$/
  • \ s significa qualquer caractere de espaço em branco
  • + seguindo o \ s significa que deve haver pelo menos um caractere de espaço em branco após a palavra de parada

Observação: também tenha em mente que o RegEx acima requer que a palavra de parada seja seguida por um espaço! Portanto, não corresponderia a uma linha que contém apenas: parar

Mike Dinescu
fonte
Nem todos os idiomas usam barras para delimitar regexes.
JAB
1
@Cat Megex: É exatamente por isso que adicionei a explicação. Se o seu idioma usar algo diferente para delimitar o regex, substitua o / pelo caractere apropriado
Mike Dinescu
1
@Mez sim, e essa redundância aumenta a clareza e o desempenho rexegg.com/regex-optimizations.html#anchors
MarredCheese
28

Se você quiser corresponder a qualquer coisa após uma palavra, parar e não apenas no início da linha, você pode usar: \bstop.*\b- palavra seguida por linha

Palavra até o fim da corda

Ou se você quiser combinar a palavra na string, use \bstop[a-zA-Z]*- apenas as palavras que começam com stop

Apenas as palavras começando com stop

Ou o início das linhas com stop apenas ^stop[a-zA-Z]*para a palavra - apenas a primeira palavra
A linha inteira ^stop.*- apenas a primeira linha da string

E se você quiser corresponder a cada string começando com stop incluindo novas linhas, use: /^stop.*/s- string multilinha começando com stop

Waxo
fonte
19

Como @SharadHolani disse. Isso não corresponderá a todas as palavras que começam com " parar "

. Somente se estiver no início de uma linha como " pare de ir ". @Waxo deu a resposta certa:

Este é um pouco melhor, se você quiser combinar com qualquer palavra que começa com " parada " e contendo nada além de letras de A a Z .

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

Isso corresponderia a todos

parar (1)

parar aleatório (2)

parando (3)

quer parar (4)

por favor pare (5)

Mas

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

corresponderia apenas (1) a (3), mas não (4) e (5)

Sedat Kilinc
fonte
8
/stop([a-zA-Z])+/

Irá corresponder a qualquer palavra de parada (parar, parar, parar, etc)

No entanto, se você quiser apenas combinar "stop" no início de uma string

/^stop/

vai fazer: D

Mez
fonte
2
Isto corresponderá a "não pare de ir"
Alex B
1
Isso não corresponderá a stop123 ou stop.
perdeu a tradução em
7

Se você quiser fazer a correspondência com qualquer coisa que comece com "parar", incluindo "parar de ir", "parar" e "parar", use:

^stop

Se você quiser combinar a palavra parar seguida de qualquer coisa como "parar de ir", "parar", mas não "parar" e não "parar", use:

^stop\W
Alex B
fonte
0

Eu desaconselho uma abordagem simples de expressão regular para esse problema. Há muitas palavras que são substrings de outras palavras não relacionadas, e você provavelmente vai enlouquecer tentando adaptar as soluções mais simples já fornecidas.

Você vai querer pelo menos um algoritmo de lematização ingênuo (experimente o lematizador Porter; há código gratuito disponível na maioria das linguagens) para processar o texto primeiro. Mantenha esse texto processado e o texto pré-processado em duas matrizes separadas de divisão de espaço. Certifique-se de que cada caractere não alfabético também obtenha seu próprio índice nesta matriz. Qualquer lista de palavras que você está filtrando, elimine-as também.

A próxima etapa seria encontrar os índices de matriz que correspondem à sua lista de palavras de 'parada' radicais. Remova aqueles da matriz não processada e, em seguida, reingressa nos espaços.

Isso é apenas um pouco mais complicado, mas será uma abordagem muito mais confiável. Se você tiver alguma dúvida sobre o valor de uma abordagem mais orientada para a PNL, talvez queira fazer algumas pesquisas sobre os erros críticos .

Robert Elwell
fonte
0

Se quiser que a palavra comece com "parar", você pode usar o seguinte padrão. "^ pare. *"

Isso corresponderá a palavras que começam com stop seguido por qualquer coisa.

Manisha Chaurasia
fonte
1
Você não poderia apenas usar "^stop"?
Stephen Rauch
Depende. Ao falar em termos de sintaxe java, podemos usar o objeto Pattern e Matcher para usar regex ou usar o método .matches () de uso direto com o objeto String. Eles diferem no resultado abaixo: code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
Manisha Chaurasia
1
Corresponde apenas se a palavra no início da linha. Se as palavras que começam com "stop" estiverem no meio ou no final da linha, esta regex não corresponderá. @StephenRauch se você omitir [az] *, não obterá palavras como "parando" por completo. No caso de "parar", você obtém "parar" e "ping" estaria faltando.
Sedat Kilinc