Como faço para criar uma regex python como "(.*)"
essa, dada a "a (b) c (d) e"
correspondência python em "b"
vez de "b) c (d"
?
Eu sei que posso usar em "[^)]"
vez disso "."
, mas estou procurando uma solução mais geral que mantenha meu regex um pouco mais limpo. Existe alguma maneira de dizer ao python "ei, combine isso o mais rápido possível"?
python
regex
regex-greedy
So8res
fonte
fonte
*?
?De acordo com os documentos :
fonte
Não
\\(.*?\\)
funcionaria? Essa é a sintaxe não gananciosa.fonte
Como os outros disseram usando o? O modificador no quantificador * resolverá seu problema imediato, mas tenha cuidado, você está começando a se desviar para áreas onde as expressões regulares param de funcionar e você precisa de um analisador. Por exemplo, a string "(foo (bar)) baz" causará problemas.
fonte
Usar uma partida desagradável é um bom começo, mas eu também sugiro que você reconsidere qualquer uso de
.*
- e quanto a isso?fonte
Deseja que ele corresponda a "(b)"? Faça como Zitrax e Paolo sugeriram. Deseja que ele corresponda a "b"? Faz
fonte
Para começar, não sugiro usar "*" nas expressões regulares. Sim, eu sei, é o delimitador de vários caracteres mais usado, mas, no entanto, é uma má ideia. Isso ocorre porque, embora corresponda a qualquer quantidade de repetição para esse caractere, "any" inclui 0, que geralmente é algo para o qual você deseja gerar um erro de sintaxe, não aceita. Em vez disso, sugiro usar o
+
sinal, que corresponde a qualquer repetição de comprimento> 1. Além disso, pelo que posso ver, você está lidando com expressões entre parênteses de comprimento fixo. Como resultado, você provavelmente pode usar a{x, y}
sintaxe para especificar especificamente o comprimento desejado.No entanto, se você realmente precisa de repetições não gananciosas, sugiro consultar o todo-poderoso
?
. Isso, quando colocado após o final de qualquer especificador de repetição de regex, forçará essa parte do regex a encontrar a menor quantidade possível de texto.Dito isto, eu teria muito cuidado com o
?
que ele tem, como a chave de fenda sônica no Dr. Who, como tem que fazer, como devo dizer, coisas "levemente" indesejadas se não forem calibradas com cuidado. Por exemplo, para usar sua entrada de exemplo, ela identificaria((1)
(observe a falta de um segundo par) como uma correspondência.fonte