我有一个字符串,我希望在开始和结束时匹配一些搜索模式.如何才能做到这一点?
假设我们有一个字符串:
string = "ftp://www.somewhere.com/over/the/rainbow/image.jpg"
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
re.search("^ftp:// & .jpg$" ,string)
Run Code Online (Sandbox Code Playgroud)
显然,这是不正确的,但我希望它能解决我的观点.这可能吗?
Sve*_*ach 27
如何不使用正则表达式?
if string.startswith("ftp://") and string.endswith(".jpg"):
Run Code Online (Sandbox Code Playgroud)
难道你不认为这读得更好吗?
您还可以支持开始和结束的多个选项:
if (string.startswith(("ftp://", "http://")) and
string.endswith((".jpg", ".png"))):
Run Code Online (Sandbox Code Playgroud)
Nik*_* B. 23
re.match
将在开头匹配字符串,与之形成对比re.search
:
re.match(r'(ftp|http)://.*\.(jpg|png)$', s)
Run Code Online (Sandbox Code Playgroud)
这里有两点需要注意:
r''
用于字符串文字,使得在正则表达式中包含反斜杠变得微不足道string
是一个标准模块,所以我选择s
作为变量r = re.compile(...)
一次构建状态机,然后使用它r.match(s)
来匹配字符串如果需要,您还可以使用该urlparse
模块为您解析URL(尽管您仍需要提取扩展名):
>>> allowed_schemes = ('http', 'ftp')
>>> allowed_exts = ('png', 'jpg')
>>> from urlparse import urlparse
>>> url = urlparse("ftp://www.somewhere.com/over/the/rainbow/image.jpg")
>>> url.scheme in allowed_schemes
True
>>> url.path.rsplit('.', 1)[1] in allowed_exts
True
Run Code Online (Sandbox Code Playgroud)
尝试
re.search(r'^ftp://.*\.jpg$' ,string)
Run Code Online (Sandbox Code Playgroud)
如果你想要一个正则表达式搜索。请注意,您必须转义句点,因为它在正则表达式中具有特殊含义。