如何在Python的正则表达式中匹配起点和终点?

20 python regex

我有一个字符串,我希望在开始结束时匹配一些搜索模式.如何才能做到这一点?

假设我们有一个字符串:

 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)

  • 我愿意,但它更复杂,因为有许多有效的开始和结束序列。如果我知道如何处理这个简单的案例,我就可以让它适应更复杂的现实。:) (2认同)

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)


JKi*_*rtz 10

不要贪心,用^ftp://(.*?)\.jpg$


How*_*ard 6

尝试

 re.search(r'^ftp://.*\.jpg$' ,string)
Run Code Online (Sandbox Code Playgroud)

如果你想要一个正则表达式搜索。请注意,您必须转义句点,因为它在正则表达式中具有特殊含义。