【问题标题】:Right way to catch slug1/slug2/slug3 page with Regex?使用正则表达式捕获 slug 1/slug 2/slug 3 页面的正确方法?
【发布时间】:2012-06-07 09:30:50
【问题描述】:

我正在尝试使用此 Re-pattern r'\({2}.+?\){2}' 从文本中捕获((slug1/slug2/slug3 someword)) 表达式。

它给了我整个表达式本身,即'((slug1/slug2/slug3 someword))'。然后我使用Python:split解析它,分别得到slug1/slug2/slug3someword

如何使用带有组的纯正则表达式模式获得相同的结果。 应该是什么模式? 任何帮助表示赞赏。

【问题讨论】:

    标签: regex nested-urls


    【解决方案1】:

    假设 slug 不能包含空格:

    \({2}(\S*)\s(.*?)\){2}
    

    更明确:

    \({2}  # two literal '(' characters
    (\S*)  # any number of non-whitespace characters, captured in group 1
    \s     # any whitespace character
    (.*?)  # any number of characters, reluctantly, captured in group 2
    \){2}  # two literal ')' characters
    

    所以slug1/slug2/slug3 将在第 1 组中,someword 将在第 2 组中。

    【讨论】:

      【解决方案2】:

      我想出了这个正则表达式:

      /([\w\/]+) (\w+)/
      

      使用此命令正确评估:

      perl -e '$a="((slug1/slug2/slug3 someword))"; if ($a =~ /([\w\/]+) (\w+)/) {print "$1 $2"}'
      

      【讨论】:

      • 根据 OP 的用例,您可能需要添加括号(例如,如果他们在一个文件上运行正则表达式,其中包含许多他们不想匹配的其他文本)。
      • 正确 :) 如果作者能让我们更深入地了解文本的结构,那就太好了
      • 文本可以是任何东西,它将用于用户输入字段。
      • 但是文本的结构是否总是包含两个左括号和两个右括号?换一种说法,给定((slug1/slug2/slug3 someword)),哪些部分会改变?只有slug1/slug2/slug3 someword?还是(())?
      • 好的,知道了。好吧,文本将始终带有 2 个开括号和 2 个闭括号。只有 slug1/slug2/slug3 someword 会改变。
      猜你喜欢
      • 1970-01-01
      • 2016-08-19
      • 2012-12-02
      • 2010-11-23
      • 2011-04-21
      • 1970-01-01
      • 2017-05-13
      • 2012-08-08
      • 2020-12-15
      相关资源
      最近更新 更多