python:不完整的URL正则表达式输出



>我创建了一个"精简"URL正则表达式。这意味着它可能无法检测到所有 URL。我创建它的目的是覆盖简单的网址。

#! python3
# urls.py - Detecting urls that begin with http:// or https://
import re
urlRegex = re.compile(r'''(
(http://|https://)+          # the http(s) part of the url
(w{3}.)?              # the world-wide-web part
([a-z0-9-])+            # the domain name
(.[a-z]{2,4})?        # sub level domain
(.[a-z]{2,4})        # top level domain
(/[-A-Za-z0-9+&@#/%=~_|])* # extension i.e paths
)''', re.VERBOSE)
test = urlRegex.search('https://www.facebook.com/user_2033')

test.groups()的输出是这样的

('https://www.facebook.com/user_2033', 'https://', 'www.', 'k', None, '.com', '/u')
[Finished in 0.058s]

经过多次尝试,我无法显示完整的网站名称和扩展名,即'facebook' not 'k'。任何不完全更改我自己的代码的帮助将不胜感激

(PATTERN)*(PATTERN)+将仅捕获最后一个匹配的字符。捕获所有字符应该是(PATTERN*)(PATTERN+)


([a-z0-9-])+          # the domain name

应替换为:

([a-z0-9-]+)          # the domain name

最后一部分相同:

(/[-A-Za-z0-9+&@#/%=~_|])* # extension i.e paths
(/[-A-Za-z0-9+&@#/%=~_|]*) # extension i.e paths

输出:

('https://www.facebook.com/user_2033', 'https://', 's', 'www.',
'facebook', None, '.com', '/user_2033')

顺便说一句,您可以使用urllib.parse.urlparse(Python 3(/urlparse.urlparse(Python 2(代替正则表达式:

>>> import urllib.parse
>>> urllib.parse.urlparse('https://www.facebook.com/user_2033')
ParseResult(scheme='https', netloc='www.facebook.com',
path='/user_2033', params='', query='', fragment='')

我使用以下正则表达式来简单地验证URL:

((http|https)://)?[a-zA-Z0-9./?:@-_=#]+.([a-zA-Z]){2,6}([a-zA-Z0-9.&/?:@-_=#])*

最新更新