Python 正则表达式,用于过滤最后一个斜杠后带有文字点的URL

Python 正则表达式,用于过滤最后一个斜杠后带有文字点的URL,python,regex,Python,Regex,我需要正则表达式来识别最后一个正斜杠之后的URL 有一个文字点,例如 http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4 http://www.example.es/cat1/cat2/cat3 没有文字点,例如 http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4 http://www.example.es/cat1/cat2/cat3

我需要正则表达式来识别最后一个正斜杠之后的URL

  • 有一个文字点,例如

    http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
    
    http://www.example.es/cat1/cat2/cat3
    
  • 没有文字点,例如

    http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
    
    http://www.example.es/cat1/cat2/cat3
    

到目前为止,我只找到了正则表达式来匹配最后一个正斜杠之前或之后的所有内容:
[^/]+$
以及最后一个斜杠之后的文本点之后的所有内容,对于错误的作业,使用正则表达式匹配URL是错误的工具。您可以使用(或在python3中)以非常类似python的方式完成此工作:

>>> from urlparse import urlparse
>>> urlparse('http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4')
ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/some-example_DH148439', params='', query='', fragment='.Rh1-js_4')
>>> urlparse('http://www.example.es/cat1/cat2/cat3')
ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/cat3', params='', query='', fragment='')
如果你真的想要一个正则表达式,下面的正则表达式就是一个可以回答你问题的例子:

import re
>>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4') != None
True
>>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/cat3') != None
True
但我给出的正则表达式足以回答您的问题,但不是验证URL或将其拆分的好方法。我想说它唯一感兴趣的是回答你的问题

下面是正则表达式生成的自动机,以便更好地理解它:

注意你的问题,因为JL的正则表达式不匹配:

http://www.example.es/cat1/cat2/cat3
在重新阅读问题3×,您实际上是在询问以下正则表达式:

\/([^/]*)$
这将匹配您的两个示例:

http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
http://www.example.es/cat1/cat2/cat3
@jl peyret建议的只是如何匹配
/
后面的一个普通点,这将生成以下自动机:

所以,无论你真正想要什么:

  • 尽可能使用URLPASSE来匹配URL的各个部分
  • 如果您试图定义django路由,那么尝试匹配片段是没有希望的
  • 下次你提出问题时,请精确,并举例说明你的尝试:帮助我们帮助你

  • 和往常一样,使用正则表达式匹配URL对于错误的作业来说是错误的工具。您可以使用(或在python3中)以非常类似python的方式完成此工作:

    >>> from urlparse import urlparse
    >>> urlparse('http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/some-example_DH148439', params='', query='', fragment='.Rh1-js_4')
    >>> urlparse('http://www.example.es/cat1/cat2/cat3')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/cat3', params='', query='', fragment='')
    
    如果你真的想要一个正则表达式,下面的正则表达式就是一个可以回答你问题的例子:

    import re
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4') != None
    True
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/cat3') != None
    True
    
    但我给出的正则表达式足以回答您的问题,但不是验证URL或将其拆分的好方法。我想说它唯一感兴趣的是回答你的问题

    下面是正则表达式生成的自动机,以便更好地理解它:

    注意你的问题,因为JL的正则表达式不匹配:

    http://www.example.es/cat1/cat2/cat3
    
    在重新阅读问题3×,您实际上是在询问以下正则表达式:

    \/([^/]*)$
    
    这将匹配您的两个示例:

    http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
    http://www.example.es/cat1/cat2/cat3
    
    @jl peyret建议的只是如何匹配
    /
    后面的一个普通点,这将生成以下自动机:

    所以,无论你真正想要什么:

  • 尽可能使用URLPASSE来匹配URL的各个部分
  • 如果您试图定义django路由,那么尝试匹配片段是没有希望的
  • 下次你提出问题时,请精确,并举例说明你的尝试:帮助我们帮助你

  • 和往常一样,使用正则表达式匹配URL对于错误的作业来说是错误的工具。您可以使用(或在python3中)以非常类似python的方式完成此工作:

    >>> from urlparse import urlparse
    >>> urlparse('http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/some-example_DH148439', params='', query='', fragment='.Rh1-js_4')
    >>> urlparse('http://www.example.es/cat1/cat2/cat3')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/cat3', params='', query='', fragment='')
    
    如果你真的想要一个正则表达式,下面的正则表达式就是一个可以回答你问题的例子:

    import re
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4') != None
    True
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/cat3') != None
    True
    
    但我给出的正则表达式足以回答您的问题,但不是验证URL或将其拆分的好方法。我想说它唯一感兴趣的是回答你的问题

    下面是正则表达式生成的自动机,以便更好地理解它:

    注意你的问题,因为JL的正则表达式不匹配:

    http://www.example.es/cat1/cat2/cat3
    
    在重新阅读问题3×,您实际上是在询问以下正则表达式:

    \/([^/]*)$
    
    这将匹配您的两个示例:

    http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
    http://www.example.es/cat1/cat2/cat3
    
    @jl peyret建议的只是如何匹配
    /
    后面的一个普通点,这将生成以下自动机:

    所以,无论你真正想要什么:

  • 尽可能使用URLPASSE来匹配URL的各个部分
  • 如果您试图定义django路由,那么尝试匹配片段是没有希望的
  • 下次你提出问题时,请精确,并举例说明你的尝试:帮助我们帮助你

  • 和往常一样,使用正则表达式匹配URL对于错误的作业来说是错误的工具。您可以使用(或在python3中)以非常类似python的方式完成此工作:

    >>> from urlparse import urlparse
    >>> urlparse('http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/some-example_DH148439', params='', query='', fragment='.Rh1-js_4')
    >>> urlparse('http://www.example.es/cat1/cat2/cat3')
    ParseResult(scheme='http', netloc='www.example.es', path='/cat1/cat2/cat3', params='', query='', fragment='')
    
    如果你真的想要一个正则表达式,下面的正则表达式就是一个可以回答你问题的例子:

    import re
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4') != None
    True
    >>> re.match(r'^[^:]+://([^.]+\.)+[^/]+/([^/]+/)+[^#]+(#.+)?$', 'http://www.example.es/cat1/cat2/cat3') != None
    True
    
    但我给出的正则表达式足以回答您的问题,但不是验证URL或将其拆分的好方法。我想说它唯一感兴趣的是回答你的问题

    下面是正则表达式生成的自动机,以便更好地理解它:

    注意你的问题,因为JL的正则表达式不匹配:

    http://www.example.es/cat1/cat2/cat3
    
    在重新阅读问题3×,您实际上是在询问以下正则表达式:

    \/([^/]*)$
    
    这将匹配您的两个示例:

    http://www.example.es/cat1/cat2/some-example_DH148439#.Rh1-js_4
    http://www.example.es/cat1/cat2/cat3
    
    @jl peyret建议的只是如何匹配
    /
    后面的一个普通点,这将生成以下自动机:

    所以,无论你真正想要什么:

  • 尽可能使用URLPASSE来匹配URL的各个部分
  • 如果您试图定义django路由,那么尝试匹配片段是没有希望的
  • 下次你提出问题时,请精确,并举例说明你的尝试:帮助我们帮助你
  • 第一个/迫使你照顾它。$强制结束字符串和 两个类的否定都避免了任何/between。 查收@

    第一个/迫使你照顾它。$强制结束字符串和 两个类的否定都避免了任何/between。 查收@

    第一个/迫使你照顾它。$强制结束字符串和 两个类的否定都避免了任何/between。 查收@

    第一个/迫使你照顾它。$强制结束字符串和 两个类的否定都避免了any/betw