正则表达式匹配与另一个正则表达式匹配的一个或多个模式

时间:2017-03-19 19:08:26

标签: python regex django

我正在为我的django url配置使用正则表达式。我有以下正则表达式:

url(r'^myapp/prices/?([X]{1}[A-Z0-9]{3}:[A-Z0-9]{1}[A-Z09.-]{1,4})/?([0-9]{0,3})/?$', views.prices, name='prices'),

匹配以下网址:

  • HTPP://127.0.0.1/myapp/prices/XNAS:GOOG / 1
  • HTPP://127.0.0.1/myapp/prices/XNAS:歌
  • HTPP://127.0.0.1/myapp/prices/XNAS:FB / 10

我想在我的网址格式中修改我的正则表达式模式,以便我可以匹配上面的字符串,以及字符串,如下所示:

  

HTPP://127.0.0.1/myapp/prices/XNAS:GOOG + XNAS:TSLA + XNAS:FB / 1

基本上,我希望我的原始模式至少匹配一次,如果不止一次,那么模式的出现应该用' +'登录。

我将如何使用正则表达式语法(Python)

来表达这一点

1 个答案:

答案 0 :(得分:2)

repeatable = r'[X]{1}[A-Z0-9]{3}:[A-Z0-9]{1}[A-Z09.-]{1,4}'
url_regex = r'^myapp/prices/?(' + re.escape(repeatable) + r')(\+' + re.escape(repeatable) + r')*/?([0-9]{0,3})/?$'

url(url_regex, views.prices, name='prices')

但我相信这更复杂:

url(r'^myapp/prices/?([X]{1}[A-Z0-9]{3}:[A-Z0-9]{1}[A-Z09.-]{1,4})(\+?[X]{1}[A-Z0-9]{3}:[A-Z0-9]{1}[A-Z09.-]{1,4})*/?([0-9]{0,3})/?$', views.prices, name='prices'),