正则表达式将路径转换为URL

时间:2011-07-11 13:41:32

标签: python regex

我有这个python脚本,它应该包含所有看起来像标记中的路径的脚本来制作一个url。

def wrap(text, regex):
    start, end = '<a href="/static', '">Link to the file</a>'
    matchs = sorted([(s.start(), s.end()) for s in re.finditer(regex, text)],
            reverse = True)
    for match in matchs: 
        text = text[:match[1]] + end + text[match[1]:]
        text = text[:match[0]] + start + text[match[0]:]
    return text

我尝试了很多像这样的组合:

>>> wrap('HA HA HA /services/nfs_qa/log.lol HO HO HO', '/services/nfs_qa/.* ??')
'HA HA HA <a href="/static/services/nfs_qa/log.lol HO HO HO">Link to the file</a>'

但似乎我无法做到正确。所以我可以在那里使用一点帮助!

提前致谢

3 个答案:

答案 0 :(得分:2)

这取决于您在路径名中允许使用哪些字符,但这可以为您的示例提供技巧:

wrap('HA HA HA /services/nfs_qa/log.lol HO HO HO', '/services/nfs_qa/[^ ]*')
'HA HA HA <a href="/static/services/nfs_qa/log.lol">Link to the file</a> HO HO HO'

[^]表示除空格外的任何内容(与[]相反)。

如果路径名中允许任何字符,则不可能。

答案 1 :(得分:1)

“”。算术每个字符,你应该匹配“除了空白字符之外的所有东西”,这意味着\S或者在这个例子上[^ ]

wrap('HA HA HA /services/nfs_qa/log.lol HO HO HO', '/services/nfs_qa/\S*')

而且,使用re.sub

可以简化你的wrap函数
import re

def tag_it(match_obj):
    tags = "<a href =\"/static{0}\">Link to the File</a>"
    return tags.format(match_obj.group(0))

def wrap(text, regex):
    return re.sub(regex, tag_it, text)

a = wrap('HA HA HA /services/nfs_qa/log.lol HO HO HO', '/services/nfs_qa/\S*')
print(a)
#Outputs: 
#HA HA HA <a href ="/static/services/nfs_qa/log.lol">Link to the File</a> HO HO HO

答案 2 :(得分:0)

你想要匹配很多。您只想匹配网址,以便像'/services/nfs_qa/\S+'这样的RE更适合。 \S+匹配/services/nfs_qa/

之后的任何非空白字符