我有一个字符串,我想在开头和结束时用一个搜索模式匹配一些东西。如何才能做到这一点?
假设我们有一个字符串:
string = "ftp://www.somewhere.com/over/the/rainbow/image.jpg"
我想做这样的事情:
re.search("^ftp:// & .jpg$" ,string)
显然,这是不正确的,但我希望它能得到我的观点。这可能吗?
答案 0 :(得分:25)
根本不使用正则表达式怎么样?
if string.startswith("ftp://") and string.endswith(".jpg"):
难道你不认为这更好看吗?
您还可以支持多个开始和结束选项:
if (string.startswith(("ftp://", "http://")) and
string.endswith((".jpg", ".png"))):
答案 1 :(得分:22)
re.match
将match the string at the beginning与re.search
形成对比:
re.match(r'(ftp|http)://.*\.(jpg|png)$', s)
这里有两点需要注意:
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
答案 2 :(得分:10)
不要greedy,请使用^ftp://(.*?)\.jpg$
答案 3 :(得分:3)
尝试
re.search(r'^ftp://.*\.jpg$' ,string)
如果您想要正则表达式搜索。请注意,您必须转义句点,因为它在正则表达式中具有特殊含义。
答案 4 :(得分:1)
import re
s = "ftp://www.somewhere.com/over/the/rainbow/image.jpg"
print(re.search("^ftp://.*\.jpg$", s).group(0))
答案 5 :(得分:0)
我要提取所有数字,包括int和float。
它对我有用。
import re
s = '[11-09 22:55:41] [INFO ] [ 4560] source_loss: 0.717, target_loss: 1.279,
transfer_loss: 0.001, total_loss: 0.718'
print([float(s) if '.' in s else int(s) for s in re.findall(r'-?\d+\.?\d*', s)])
引用:here