2011-08-21 41 views
1

我想处理地理名称,如/ new_york或/纽约等 ,因为纽约是django-slugify为纽约,那么也许我应该使用slugifed的名称,即使名称带下划线看起来更好,因为我可能想要通过django slugify等算法自动创建URL。一个猜测是([A-Za-z]+)或简单([\w-]+)可以工作,但要安全我问你在哪种正则表达式是最好的选择在这种情况下。 我已经得到了处理数字连接数的一类正则表达式:我可以使用Python正则表达式来处理字母,破折号和下划线吗?

('/([0-9]*)',ById) #fetches和ID显示实体

现在我想另一个正则表达式来匹配例如姓名new_york,以便 /new_york的请求被适当的处理程序处理。基本上否定上面的正则表达式会或任何组合字母+下划线,也许是一个破折号 - 因为名称是地理和看起来我可以使用这个正则表达式,但我相信它的工作原理只是因为它只需要它的一切:

('/(.*)', ByName)#通过自定义映射为我的相关位置处理实例/ new_york实体,/ sao_paulo实体等。

由于我有其他处理程序,我不想冲突正则表达式,并且我有其他请求处理程序,您可以推荐如何制定正则表达式?

当表达式适合2个正则表达式时它如何工作?哪个具有更高的优先级?您能否告诉我更多我应该如何学习编写地理数据存储区的正则表达式和可能的实现 - 作为实体或实例变量以及特殊问题,例如地理位置在不同语言中具有不同名称的例如德国的德国人称为德国人,所以我也想申请我可以用gettext/djang.po文件做的翻译。

回答

3

第一场比赛胜出。

通常您的网址在路径的其他部分会有所不同。例如,你可能有

/cities/(?P<city>[^/]+) 
/users/(?P<user>[^/]+) 

,并在许多情况下,[^ /] +是一个很好的正则表达式,因为它会匹配/除外,你通常会避免,因为它是用来分隔路径元素任何东西。

我不认为这是一个好主意,基于字符(在你的情况下,字母或数字)分开的网址,但如果你想这样做,请使用[-A-Za-z_]+(注意“ - ”在[]的开始,或者它需要一个反斜杠)。

避免\w,因为它也可以匹配数字。除非你想要去真的疯了,并只发送给一个处理数字和字母+数字的其他地方,在这种情况下使用:

/(?P<id>\d+) 
/(?P<city>[-\w]+) 
的顺序

+0

谢谢安德鲁我仍然试图学习如何正确使用正则表达式。一个URL看起来像/ view/323,其中数字部分是动态的并且表示实体ID,同时允许按照地理位置的请求被处理,例如, /纽约/曼哈顿。现在我只设置3个正则表达式,其中1个匹配/ new_york和一个匹配/ new_york /曼哈顿,但仍不与单个实体视图冲突。 –

相关问题