我有这个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>'
但似乎我无法做到正确。所以我可以在那里使用一点帮助!
提前致谢
答案 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/