Pergunta

Como faço para reescrever isso nova maneira de reconhecer endereços para trabalhar em Python?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

Foi útil?

Solução

o fonte original Para isso, os estados "esse padrão deve funcionar na maioria das implementações modernas do Regex" e especificamente Perl. A implementação de Regex de Python é moderna e semelhante ao de Perl mas está faltando o [:punct:] classe de personagem. Você pode construir facilmente isso usando isso:

>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)

o re.sub() Call escapa a certos personagens dentro do conjunto de personagens como requerido.

Editar: Usar re.escape () também funciona, pois apenas enfia uma barra de barriga na frente tudo. Isso me pareceu grosseiro para mim, mas certamente funciona bem para este caso.

>>> pat = pat % re.escape(string.punctuation)

Outras dicas

Eu não acho que Python tenha essa expressão

[:punct:]

Wikipedia diz [:punct:] é o mesmo para

[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]

Python não tem o Expressões de suporte POSIX.

o [:punct:] A expressão do suporte é equivalente em ASCII a

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top