当前正则表达式为:
url(r'^partner/(?P<author>[-w]+)/(?P<video>w+)/(?P<title>w+)/$', 'video_player'),
我已经尝试了一段时间,但无法在title(最后一个参数)将接受以下2个示例字符串的地方工作:
- 僵尸启示录!:你需要的(100+)救生技能"专家";还是他们这么说
- http://gdata.youtube.com/feeds/api/videos/k8J-72MmTGg/related?v=2
有什么建议吗?
编辑
以下是一些当我将其作为title的参数传递时不起作用的文本:美国国家棒球名人堂展示了6件洋基季后赛纪念品:1923年世界大赛的手表;贝比·鲁斯1926年世界大赛的球棒;1956年唐·拉森完美比赛中尤吉·贝拉的手套;1962年世界大赛的最后一个出局球;德里克·杰特1996年世界大赛的球衣;马里亚诺·里维拉2000年地铁系列赛的帽子。
http://www.buzzfeed.com/sports
w+
是一个仅匹配字母数字字符和下划线的正则表达式。我将尝试展示你给出的例子的一个严格的解决方案,以及一个可能对你有用的更通用的解决方案。
由于您喜欢匹配w
组中不包含的其他字符,因此应该创建一个自定义组,添加所需的特殊字符。要组成一个小组,你可以把它写在方括号[]之间。要将字符添加到组中,只需一个接一个地写入它们,除了-
,因为它可以定义范围,所以必须将其放在前面。对于第一个示例,您需要匹配括号和加号等字符,这些字符对于regex来说是特殊的,因此必须转义。用于+->+用于(->使用(因此,第一个示例的正则表达式开始看起来是这样的:[w()+]+
关于regex上的备忘单,您可以查看:备忘单或可下载在开头添加-号以避免范围,以及其他转义字符和非转义字符。一个匹配两个字符串的组看起来像:
[-w/?:=.s!()"+]+
由于这很复杂,而且您似乎想要获得几乎任何内容作为标题,我建议使用特殊组.
,因为它包括除换行符之外的任何字符。
regexp看起来非常简单:.+
url(r'^partner/(?P<author>[-w]+)/(?P<video>w+)/(?P<title>.*)/$', 'video_player'),
应该送你去那里。只需在视频比赛后担任队长,直到决赛/