向大家请教关于 Python 用正则表达式匹配 mention 的问题

2012-06-05 13:33:56 +08:00
 Livid
下面这个是目前 PB3 的 mentions 转换的函数:

def mentions(value):
return re.sub(r'(\A|\s)@(\w+)', r'\1@<a href="/member/\2">\2</a>', value)

有个问题就是,如果在 @ 的前面有中文,比如@Livid,既如字后面没有空格的时候,就不会触发转换。

但是实际上 notification 的触发是没有问题的,因为 notification 里用的是另外一段转换规则。

关于在正文中的这段 mentions 的转换函数,大家有什么好办法实现可以让 @ 跟在中文后面么?
3726 次点击
所在节点    Python
3 条回复
phuslu
2012-06-05 13:44:32 +08:00
试下
return re.sub(ur'(\A|\s|[\u4e00-\u9fa5])@(\w+)', ur'\1@<a href="/member/\2">\2</a>', value)
需要 value 是unicode,或者 sys.setdefaultencoding('utf-8')
c
2012-06-05 13:51:09 +08:00
写了个test, https://gist.github.com/2872926

如果要求@前面有字母也要求能转换,如何避免别人输入的邮箱地址,比如 value = "test@163.com xxx"

我认为应该在转义前,检查是否存在该用户。感觉用markdown的block来处理这个问题是个不错的选择。
Livid
2012-06-15 23:43:32 +08:00
@phuslu 非常感谢。已经部署。

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

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

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

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

© 2021 V2EX