【发布时间】:2014-03-01 00:42:02
【问题描述】:
我有一个名为 Tag 的模型,我的数据库中有很多这样的模型。 我想通过以下方式通过 URL 在页面中访问它们:
如果我想查看 id 为 1、3 和 4 的标签,那么 URL 应该以 134 结尾。 我应该使用什么正则表达式模式才能从 /.../134/ 之类的 URL 中获取列表 [1,3,4]?
提前致谢
【问题讨论】:
我有一个名为 Tag 的模型,我的数据库中有很多这样的模型。 我想通过以下方式通过 URL 在页面中访问它们:
如果我想查看 id 为 1、3 和 4 的标签,那么 URL 应该以 134 结尾。 我应该使用什么正则表达式模式才能从 /.../134/ 之类的 URL 中获取列表 [1,3,4]?
提前致谢
【问题讨论】:
您需要固定宽度的标签标识符(例如 001003004),否则会产生歧义。如果你使用它,你可以捕获\d+,然后在视图中做这样的事情:
>>> import re
>>> tag_string = "001003004"
>>> regex = re.compile("\d{3}")
>>> tag_list = map(int, regex.findall(tag_string))
[1, 3, 4]
【讨论】:
如果 A.) URL 中的连续数字是任意的,并且 B.) 您需要将每个数字分别返回到您的代码,则仅使用正则表达式可能会很困难/不可能。
如果你只需要获取数字字符串(然后在你的代码中解析它),你可以使用这个:
/(\d+)/(如果 / 用作分隔符,请转义)
然后你可以在 $1 上运行一些字符串操作
如果您需要正则表达式将每个数字返回为 $1、$2、$3 等,我相信唯一的解决方案是相当不雅的,像这样:
/(\d)(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?(\d)?/
...在这种情况下,它最多支持 URL 中的 10 个标签。
【讨论】: