如何重写这个new way to recognise地址以在Python中工作?Gruber在Python中的正则表达式
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
如何重写这个new way to recognise地址以在Python中工作?Gruber在Python中的正则表达式
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
的original source为,指出具体的Perl“这图案应在最现代化的regex实现工作”。 Python的正则表达式的实现是现代的,并且similar to Perl's但缺少[:punct:]
字符类。您可以轻松地构建,使用这样的:里面的字符集as required
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
的re.sub()
电话逃逸若干字符。
编辑:使用re.escape()的作品一样好,因为它只是在坚持一切的前面一个反斜杠。起初,这对我来说很粗糙,但对于这种情况确实很好。
>>> pat = pat % re.escape(string.punctuation)
我不认为Python有这种表达
[:punct:]
Wikipedia说[:punct:]
是相同的,以
[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~]
维基百科错误。根据http://www.regular-expressions.info/posixbrackets.html,它错过了脱字符号。 – 2009-12-31 17:05:02
好吧,现在是对的。请更新您的答案。 – 2009-12-31 17:07:28
是的,更新了我的帖子,谢谢。有人更新了维基百科。大! – YOU 2009-12-31 17:09:46
Python不具备POSIX bracket expressions。
的[:punct:]
括号表达式是在对应的ASCII码
[!"#$%&'()*+,\-./:;<=>[email protected][\\\]^_`{|}~]
确保在使用该字符串时使用“raw”字符串(前缀为“r”),否则反斜杠转义将不正确。 – 2009-12-31 17:10:33
另外请注意,Python不支持这些Unicode字符属性:http://stackoverflow.com/questions/1832893 – 2009-12-31 17:56:31
确实,它们编译得很好,但不会做你期望的东西 – Tobias 2009-12-31 18:00:08
哪部分不工作? – 2009-12-31 16:45:02
为什么你不把你的代码放在问题中,例如 – 2009-12-31 17:32:28
@vanity失败,Unicode字符属性的答案将不起作用。请参阅http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties – 2009-12-31 17:57:02