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

分隔符之间匹配正则表达式的有效方法

  •  1
  • eee  · 技术社区  · 9 年前

    我有一个字符串,想用正则表达式匹配两个第一个分隔符之间的子字符串。

    例如字符串 foo"text"bar anotherfoo"anothertext"anotherbar 带分隔符 " 应该屈服 text .

    我找到了以下可能的解决方案:

    • 非贪婪匹配 "(.*?)"
    • Lookahead和Lookbehind断言的非贪婪匹配 (?<=")(.*?)(?=")
    • 否定的字符类 "([^"]*)"

    哪种方法最有效?或者,我是否遗漏了这些解决方案表现不同的情况(假设新行修改器设置为使点与新行匹配)?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Wiktor Stribiżew    9 年前

    由于分隔符是单个字符,并且匹配的子字符串不应包含它们 否定字符类 解决方案( "([^"]*)" )是最有效的。

    如果你只想匹配一次,你甚至不需要结束 " :仅使用 "([^"]*) .

    懒惰的点匹配( "(.*?)" )当没有结束分隔符并且文本在初始分隔符之后相当大时,该技术可能会导致性能问题。

    查找几乎总是涉及在每个测试位置检查某些子模式的额外开销。因为这里的分隔符是单个字符,所以这里的lookbehind/lookahead不是有效的。您只想在以下情况下使用此解决方案 无法访问捕获组 。在Python中,捕获工作良好,因此无需使用此解决方案。