【问题标题】:How do I get the correct regex for this string?如何获得此字符串的正确正则表达式?
【发布时间】:2012-10-11 14:22:09
【问题描述】:

当我将它作为描述参数传递时,这里有一些文本不起作用(包括返回字符和它后面的 url)。我在 django 中这样做。

合作伙伴/BuzzFeed/fXkqhhIlOtA/纽约洋基队:6 件必不可少的季后赛纪念品/国家棒球名人堂展示了 6 件洋基队季后赛纪念品:1923 年世界大赛的手表; 1926 年世界大赛中贝比·鲁斯 (Babe Ruth) 的球棒; 1956 年 Don Larsen 完美比赛中 Yogi Berra 的手套; 1962 年世界大赛的最后一球; Derek Jeter 1996 年世界大赛的球衣; 2000 年地铁系列中的马里亚诺·里维拉 (Mariano Rivera) 的帽子。 http://www.buzzfeed.com/sports/

urlpatterns = patterns('reserve.views',
    url(r'^partner/(?P<partner_name>[-\w]+)/$', 'partner_channel'),
    url(r'^partner/(?P<author>[-\w]+)/(?P<video>[-\w]+)/$', 'video_player'),
    url(r'^partner/(?P<author>[-\w]+)/(?P<video>[-\w]+)/(?P<title>.+)/(?P<desc>.+)/$', 'video_player'),
    url(r'^category/(?P<category>[-\w]+)/$', 'all_partners'),
    url(r'^admin/', include(admin.site.urls)),
)

如何更改 desc 参数的正则表达式以允许这样做?

编辑:

未找到请求 URL 页面 (404):

http:/localhost:8000/partner/BuzzFeed/fXkqhhIlOtA/NY%20Yankees:%206%20Essential%20Pieces%20of%20Postseason%20Memorabilia/The%20National%20Baseball%20Hall%20of%20Fame%20shows%20off%206%20pieces%20of%20Yankees%20postseason%20memorabilia:%20a%20watch%20from%20the%201923%20World%20Series;%20Babe%20Ruth's%20bat%20from%20the%201926%20World%20Series;%20Yogi%20Berra's%20glove%20from%20Don%20Larsen's%20perfect%20game%20in%201956;%20the%20last%20out%20ball%20in%20the%201962%20World%20Series;%20Derek%20Jeter's%20jersey%20from%20the%201996%20World%20Series;%20Mariano%20Rivera's%20hat%20from%20the%202000%20Subway%20Series.%0A%0Ahttp://www.buzzfeed.com/sports/

【问题讨论】:

  • 什么描述?什么视频?哪个作者?我看不出您发布的内容与正则表达式的功能之间有任何关联。你到底想做什么?
  • 怎么不工作。你能提供你试图解析的整个文本吗?缺少某些东西,因为该正则表达式可能无法与该文本一起使用。它不以“合作伙伴”开头
  • 我现在编辑了 url 以显示完整的 url,而不仅仅是我认为的问题(desc 参数)。
  • 需要更多代码。您所显示的甚至不是 Python 中的正则表达式,url(r'text') 显示的是 text 的原始字符串文字,您的示例中没有任何内容显示正则表达式引擎实际解析。
  • 更多代码!对于初学者,url 行的其余部分(出于某种原因)以逗号结尾; url 行之前/之后的周围代码等

标签: python regex url


【解决方案1】:

问题是你的标题匹配是贪婪的并且匹配的比你想要的多,并且分隔你的部分的 / 被包含在标题中,而 desc 是最后一个 / 之后的所有内容(在 url 中)

将其改为非贪婪(?P&lt;title&gt;.+?)

url(r'^partner/(?P<author>[-\w]+)/(?P<video>[-\w]+)/(?P<title>.+?)/(?P<desc>.+)/$', 'video_player'),

【讨论】:

  • 我尝试添加“?”在标题的末尾,但它似乎仍然不起作用。
  • 定义“似乎不起作用”。如果您不提供详细信息,我们将无法提供帮助。
  • 对不起...意思是我得到了和以前一样的错误。找不到页面 (404)。请求 URl 正在编辑中。
  • 网址应该是这样,但我认为它与发布的正则表达式不匹配。
【解决方案2】:

给它s 选项。默认情况下,. 匹配任何字符 except 换行符。此外,您需要使您的标题部分不贪婪,否则它将与您的整个描述相匹配。使用.+? 而不是.+ 这样做。

【讨论】:

  • 不,它由 / 而不是 : 分隔(在“季后赛纪念品/”之后)
【解决方案3】:

您的urlpatterns 正在被覆盖(可能不正确)。您有两个匹配 'video_player' 但没有匹配 'desc' 的模式:

url(r'^partner/(?P<author>[-\w]+)/(?P<video>[-\w]+)/$', 'video_player'),
url(r'^partner/(?P<author>[-\w]+)/(?P<video>[-\w]+)/(?P<title>.+)/(?P<desc>.+)/$', 'video_player'),

将上面的最后一个 url 标识符更改为“video_player”以外的其他内容。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多