对于带有sub的简单正则表达式感到困惑

时间:2011-02-24 12:05:42

标签: python regex

我有以下python代码:

TRAC_REQUEST_LOCATION=""    

TRAC_ENV=TRAC_ENV_PARENT+"/"+re.sub(r'^'+TRAC_REQUEST_LOCATION+'/([^/]+).*', r'\1', environ['REQUEST_URI'])

environ ['REQUEST_URI']的内容类似于/ abc / DEF,我只想获得abc,但它不起作用。只有它有效,但为什么?

感谢您的任何建议。

编辑:

以下是给定答案的新代码:

def check_password(environ, user, password):
    global acct_mgr, TRAC_ENV

    TRAC_ENV = ''

    if 'REQUEST_URI' in environ:
        if '/' in environ['REQUEST_URI']:
             TRAC_ENV = environ['REQUEST_URI'].split('/')[1]
    else:
        return None

但我得到像/ abc /或/ abc这样的TRAC_ENV,但我只需要abc部分。
代码有什么问题?

3 个答案:

答案 0 :(得分:2)

为什么需要regexp?使用urlparse(Python 2.x,其中有一个Python 3.x链接)。

答案 1 :(得分:1)

如果要提取请求路径的第一部分,这是最简单的解决方案:

TRAC_ENV = ''
if '/' in environ['REQUEST_URI']:
    TRAC_ENV = environ['REQUEST_URI'].split('/')[1]

修改

示例用法:

>>> def trac_env(environ):
...     trac_env = ''
...     if '/' in environ['REQUEST_URI']:
...         trac_env = environ['REQUEST_URI'].split('/')[1]
...     return trac_env
... 
>>> trac_env({'REQUEST_URI': ''})
''
>>> trac_env({'REQUEST_URI': '/'})
''
>>> trac_env({'REQUEST_URI': '/foo'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/bar'})
'foo'
>>> trac_env({'REQUEST_URI': '/foo/bar/'})
'foo'

答案 2 :(得分:0)

我回到上面的代码,现在工作正常。
也许组件的更新是解决方案。