如何匹配Python正则表达式的开头和结尾?

时间:2012-03-30 16:37:28

标签: python regex

我有一个字符串,我想在开头结束时用一个搜索模式匹配一​​些东西。如何才能做到这一点?

假设我们有一个字符串:

 string = "ftp://www.somewhere.com/over/the/rainbow/image.jpg"

我想做这样的事情:

 re.search("^ftp:// & .jpg$" ,string)

显然,这是不正确的,但我希望它能得到我的观点。这可能吗?

6 个答案:

答案 0 :(得分:25)

根本不使用正则表达式怎么样?

if string.startswith("ftp://") and string.endswith(".jpg"):

难道你不认为这更好看吗?

您还可以支持多个开始和结束选项:

if (string.startswith(("ftp://", "http://")) and 
    string.endswith((".jpg", ".png"))):

答案 1 :(得分:22)

re.matchmatch the string at the beginningre.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