代码之家  ›  专栏  ›  技术社区  ›  Menda

regex中的最后一个匹配符号

  •  2
  • Menda  · 技术社区  · 15 年前

    我找不到更具描述性的标题,但这里有一个例子:

    import re
    m = re.search(r"\((?P<remixer>.+) (Remix)\)", "Title (Menda Remix)")
    m.group("remixer") # returns 'Menda' OK
    m = re.search(r"\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)")
    m.group("remixer") # returns 'Blabla) (Menda' FAIL
    

    这个regex找到第一个括号,我想匹配最后一个括号,以便总是得到'menda'。我已经使用额外的函数解决了这个问题,但是我希望使用相同的regex有一个更清晰和更一致的方法。

    多谢各位。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Ignacio Vazquez-Abrams    15 年前
    re.search(r"\((?P<remixer>[^)]+) (Remix)\)", "Title (Blabla) (Menda Remix)")
    
        2
  •  1
  •   kennytm    15 年前

    使用 [^()]+ 而不是 .+ 不匹配括号。

        3
  •  1
  •   Bill Lynch    15 年前

    我可能会这样做:

    m = re.search(r".*\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)")
    
        4
  •  1
  •   Wolph    15 年前

    只需添加一个 $ 直到模式结束,你就完成了:)

    import re
    m = re.search(r"\((?P<remixer>[^)]+) (Remix)\)$", "Title (Menda Remix)")
    print m.group("remixer") # returns 'Menda' OK
    m = re.search(r"\((?P<remixer>[^)]+) (Remix)\)$", "Title (Blabla) (Menda Remix)")
    print m.group("remixer") # returns 'Blabla) (Menda' FAIL
    

    附言:我也改变了 .+ [^)]+ 所以你一个都配不上 ) 在这个过程中。