1
msg7086 2016-10-01 07:04:11 +08:00
举个栗子?
|
2
imn1 2016-10-01 07:32:31 +08:00
先把文本格式写出来才能讨论
|
3
lxy42 2016-10-01 07:59:52 +08:00 via Android
正则表达式兼容 URL 中包含参数的情况
|
5
ebony0319 2016-10-01 09:39:59 +08:00 via Android
|
6
xixitalk OP 文本例子
文本:第一个地址: http://g.cn 第二个地址: http://g.cn/1234 替换后:第一个地址:<a href="http://g.cn">http://g.cn</a> 第二个地址:<a href="http://g.cn/1234">http://g.cn/1234</a> |
7
xixitalk OP 正则表达式提取了整个 URL ,包括参数的
|
9
zjuhwc 2016-10-01 09:46:06 +08:00 via iPhone
|
11
xixitalk OP |
13
zjuhwc 2016-10-01 09:58:49 +08:00
哦,看明白了,你想用 replace 。问题是你都用正则提取了,为啥不直接用正则替换。比如你提取用的是 re.match(pattern, string) ,你可以直接用 re.sub(pattern, repl, string, max=0) 做正则替换,复用之前的 pattern 啊
|
14
buir 2016-10-01 10:59:37 +08:00
很简单 写个软件就可以了~
|
15
aploium 2016-10-01 11:00:25 +08:00
这是因为你正则写得不好啊
自行 google 一下 "regex url" |
16
aploium 2016-10-01 11:04:34 +08:00
还有正则引擎一般都带有 sub 功能的, 就是直接把匹配到的东西原地替换
比如(Python) >>>re.sub(r"( http://go\.cn)",r"""<a href="\1">\1</a>""", "http://go.cn") <a href="http://go.cn">http://go.cn</a> |
17
moxiaonai 2016-10-01 11:49:35 +08:00 via iPhone
正则写的更准确一点应该能解决
|
18
Shazoo 2016-10-01 12:39:42 +08:00
1. 正则原地替换
2. 如果觉得正则替换代码可读性低了点,不好维护,就在创建 list 的时候,保留这个 sub 字串的 pos ,后续在利用 pos 进行替换。 粗略一想,没试验,用哪种,还是自己评估。 不过我个人建议方案 1 。正则这东西,就是个坎,肯定得学习到一定程度的。长痛不如短痛,好好记忆吧。 |
19
arnofeng 2016-10-01 13:40:22 +08:00 via iPhone
正则没写好 你要匹配到斜杠的
|
20
imn1 2016-10-01 14:53:06 +08:00
还是没有说清楚格式
如果每行一个 url ^(.+)$ -> <a href="$1">$1</a><br> 就够了 如果是没有分行,就要说清楚 url 之间是怎么分隔的 |
21
xixitalk OP 感谢,写了一个能用的
def convertMsgToHTML(msg): #urls = re.findall('http[s]?://(?:#|[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', msg) msg = re.sub(r'( http[s]?://(?:#|[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)', r'<a href="\g<1>" target="_blank">\g<1></a>',msg,count=0,flags=re.UNICODE|re.MULTILINE) return msg 测试: msg = u'''特殊 123 http://g.cn 456 http://g.cn/1234 78910 汉字 ''' text = convertMsgToHTML(msg) print text.encode('utf-8') 输出结果: 特殊 123 <a href="http://g.cn" target="_blank">http://g.cn</a> 456 <a href="http://g.cn/1234" target="_blank">http://g.cn/1234</a> 78910 汉字 |
22
xixitalk OP 我现在明白推特的 tweet 结构里不仅保存了缩短的地址 url ,还有展开地址 expand_url ,还有一个显示地址 disp_url 。不然推文转换成 html 太低效率了。
缩短的地址保证了地址唯一性(当然还有数据统计方面的作用) 展开地址是用户原始输入的地址 显示地址保证了原始地址过长只显示前面 30 字节左右,排版美观。 |