如何简化我的正则表达式

时间:2016-03-18 15:29:36

标签: regex url routes

我怎样才能简化我的正则表达式以获取包含以下内容的网址:

de-[.+]
em-[.+]
empresa-[.+]
area-[.+]

任意顺序,例如

/home/de-xpto/area-xpto/empresa-xpto

/home/area-xpto/empresa-xpto/de-xpto

/home/empresa-xpto/em-xpto/de-xpto

等...

还有一个正则表达式,我可以确定是否没有列表中的任何一个。

\/home\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))\/([de|area|em|empresa]*-([^\/]+))

由于

1 个答案:

答案 0 :(得分:1)

你的正则表达式包含带有fig = pylab.figure() ax = pylab.gca() ax.plot(x, y) ax.set_yscale('log') 交替符号的字符类,这是错误的。您必须使用分组构造 |来匹配替代的字符序列。

这就是说,你很可能需要

(...)

这是regex demo

  • \/home(?:\/(?:de|em(?:presa)?|area)-[^\/]+)+ - 匹配\/home
  • /home - 匹配以下1个或多个序列:
    • (?:\/(?:de|em(?:presa)?|area)-[^\/]+)+ - \/符号
    • / - (?:de|em(?:presa)?|area)deemempresa
    • area - 文字-
    • - - 除[^\/]+
    • 以外的1 +个符号

如果您需要将这些网址作为完整字符串进行匹配,请添加/(在开始时)和^(在结尾处)锚点。