如何用正则一次性替换所有的@username为@nickanme?有比.replace()更好的办法吗?已附代码示例。

2013-02-01 22:17:20 +08:00
 paloalto
http://gist.github.com/4691511

重复replace() 伤不起啊。。
2973 次点击
所在节点    编程
7 条回复
keakon
2013-02-01 22:28:42 +08:00
没看懂你干啥,你是要re.sub()么?
paloalto
2013-02-01 22:34:13 +08:00
@keakon 啊简单的说就是想把字符串 '@post-rocker @post-rocker' 替换为:

'@<a href="/member/post-rocker">孬爷爷&nbsp;biu一&nbsp;声</a> @<a href="/member/post-rocker">孬爷爷&nbsp;biu一&nbsp;声</a>'
paloalto
2013-02-01 22:45:14 +08:00
哈哈哈

>>> comment = '@post-rocker @post-rocker :请查看@ailuoli 的文章'
>>> stra = re.compile(r'@([a-zA-Z0-9][\w\-\.\_]+)',re.I)
>>> comment = stra.sub('ddd', comment)
>>> print comment
ddd ddd :请查看ddd 的文章

好像是这么个思路!!
paloalto
2013-02-01 22:54:53 +08:00
>>> stra = re.compile(r'@([a-zA-Z0-9][\w\-\.\_]+)',re.I)
>>> comment = '@post-rocker @post-rocker'
>>> for i in xrange(len(usernames)):
... comment = stra.sub('<a href="/member/'+ usernames[i] + '">' + nicknames[i] + '</a>', comment)
...
>>> print comment
<a href="/member/post-rocker">孬爷爷</a> <a href="/member/post-rocker">孬爷爷</a>


大功告成!!!哈哈哈哈哈哈!!
zhy0216
2013-02-21 23:19:04 +08:00
用lz一开始的思路应该也走得通.
只要去除重复就可以了.
具体可以使用一个dictionary.
dict(zip(usernames,nicknames))
greenymora
2013-02-22 01:22:00 +08:00
@paloalto 话说。我想要进排名看看。邮箱是 greenymora@gmail.com
paloalto
2013-02-22 13:52:43 +08:00
@greenymora 排名已经停了啊。我从那个公司离职一年多了。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX