【问题标题】:Python RegEx not working - DjangoPython RegEx 不起作用 - Django
【发布时间】:2015-10-03 18:10:32
【问题描述】:

我正在尝试匹配文本:details/1234/

使用正则表达式:r'^details/(?P<article_id>[0-9]+)/$'

article_id 作为参数传递给表达式。这不会在 Pythex 和(显然)Django 上返回任何匹配项。

我也试过了:

r'^details/(?P<details>\w+)/$' 但这也不会返回任何内容。我迷路了。有人可以帮忙吗?

例如。字符串:localhost:8080/details/1234/

【问题讨论】:

  • 您能否提供一个示例,其中包含您针对正则表达式使用的“details/1234”。
  • 用示例字符串更新问题
  • 该模式是正确的,适用于 URL 'localhost:8080/details/1234/'
  • 您的正则表达式具有行尾和行首锚点。您的示例末尾没有/。因此,您的正则表达式无法匹配您的示例。
  • @DanielRoseman - 添加了来自 Pythex 的屏幕截图。似乎不起作用:(@RonRosenfeld你建议我改变什么?我删除了第二个斜杠并尝试了localhost:8080/details/1234,并且还尝试了localhost:8080/details/1234/与给定的正则表达式。Pythex在两者中都没有找到匹配项案例

标签: python regex django


【解决方案1】:

你为什么不使用 urlparse 来帮助你更多呢?

from urlparse import urlparse

d = urlparse('http://localhost:8080/details/1234')

输出:

ParseResult(scheme='http', netloc='localhost:8080', path='/details/1234', params='', query='', fragment='')

获取路径:

>>> d.path
'/details/1234'
>>>

如果您想在提取路径后使用您的正则表达式,您可以使用您的正则表达式并稍作修改:

我添加了/?,它将查找“/”或不查找“/”。

^/?details/(?P<article_id>[0-9]+)$

pythex 将其提取为:

article_id 1234

【讨论】:

  • 我添加了来自 Pythex 的屏幕截图 - 如果我在这里做错了什么,你能告诉我吗?
  • 是的。摆脱'^'。 '^' 表示从字符串的开头开始。我从你的正则表达式中删除了它,它起作用了。
  • 如果您使用 urlparse 然后应用您的正则表达式,它将起作用。实际上,对您的正则表达式进行小的修改也会对您有所帮助。我会更新我的答案。
  • 这似乎确实适用于 Pythex。但不是在 Django 上——我在这里发布了一个 Django 版本的问题:stackoverflow.com/q/32916267/1409180 如果你对 Django 很好,你能看看你是否可以帮助我吗?
【解决方案2】:

试试这个;

/详细信息\/(?P[0-9]+)/$/

我删除了开头的^ 符号。因为那个符号(称为 carat)试图搜索模式 "from the start of the line",而你的模式 details/... 并没有从行首开始!

我还删除了r (Python’s raw string notation),然后我转义了/ 字符以保持一致:)

【讨论】:

  • 这似乎确实适用于 Pythex。但不是在 Django 上——我在这里发布了这个问题的 Django 版本:stackoverflow.com/q/32916267/1409180 如果你对 Django 很好,你能看看你是否可以帮助我吗?
  • 嗯,我不擅长 Django,但我正在看你的问题 :) 你删除了 '^' 吗?,似乎这可能是问题的原因!
【解决方案3】:

在这里,您尝试传递一个开头带有克拉^ 的“Django 风格”网址。 Django 知道你在 urls.py 中的所有 url 都是 relative 并且应该以 127.0.0.1:8000 或 localhost:8080 或你在启动 runserver 或 settings.py 时设置的任何内容开头。 Pythex 不知道这一点,因此它会尝试查找 absolute 路径以“/details/...”开头的任何匹配项,当然会失败。因此,从您的正则表达式的开头删除一个克拉应该可以解决问题。

但是,正如 Daniel Roseman 已经提到的,这在 django 中应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多