用于URI路由的正则表达式

时间:2011-09-25 03:30:14

标签: python regex

自问题发生变化后,我正在跟进一个问题

Finding the regex for /<region>/<city>/<category>?

有效的答案是/(?:[^/]+)/?([^/]*)/?([^/]*),它输出1美元的城市,2美元的类别,但我也只想输出0美元,所以你可以帮我修改一下吗?

似乎我终于可以用这个正则表达式做我想做的事情,它也适用于我之前提出的2个问题

Can I use a python regex for letters, dashes and underscores?

How to represent geographical locations

我的计划是实现多租户功能,以便相同的软件可以同时使用相同的代码为sao paulo和delhi这样的大城市服务,所以我必须使它非常通用,并且对于具有相同表达式的所有位置,即//

加上问题,当我们说例如“搜索纽约” - 地区还是城市?一条信息是谷歌地图的输出,定义“纽约”,其中“地区”对应“行政区”:

{
  "name": "New York",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "New York, NY, USA",
    "AddressDetails": {
   "Accuracy" : 4,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "NY",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "New York"
            },
            "SubAdministrativeAreaName" : "New York"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 40.8495342,
        "south": 40.5788964,
        "east": -73.7498543,
        "west": -74.2620919
      }
    },
    "Point": {
      "coordinates": [ -74.0059731, 40.7143528, 0 ]
    }
  }, {
    "id": "p2",
    "address": "Manhattan, New York, NY, USA",
    "AddressDetails": {
   "Accuracy" : 4,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "NY",
         "SubAdministrativeArea" : {
            "Locality" : {
               "DependentLocality" : {
                  "DependentLocalityName" : "Manhattan"
               },
               "LocalityName" : "New York"
            },
            "SubAdministrativeAreaName" : "New York"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 40.8200450,
        "south": 40.6980780,
        "east": -73.9033130,
        "west": -74.0351490
      }
    },
    "Point": {
      "coordinates": [ -73.9662495, 40.7834345, 0 ]
    }
  } ]
}
:

但是我不认为所有代码都必须在同一个文件中,因为我可以为每个区域创建一个文件或者像这样的结构,因为整个世界的区域总数(“状态”)不是很远远大于国家总数,但世界上的城市总数很多。它似乎有一个包含在项目中的每个国家的文件是一个简单而好的组织方式。

非常感谢

更新

我觉得有用的正则表达式是

application = webapp.WSGIApplication([('/([^/]+)/?([^/]*)/?([^/]*)',Handler),],debug=True)

1 个答案:

答案 0 :(得分:3)

  

(?:...)      常规括号的非捕获版本。匹配括号内的正则表达式,   但是在执行匹配后或在模式中稍后引用时,无法检索组匹配的子字符串。

http://docs.python.org/library/re.html

?:表示匹配,但不会将其保存在组中,将其删除并重试。