【问题标题】:Python regex lookbehind and lookaheadPython 正则表达式向后和向前
【发布时间】:2017-12-19 12:14:52
【问题描述】:

我需要从具有这种格式的字符串中匹配字符串“foo”:

string = "/foo/boo/poo"

我绑定了这段代码:

poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)

它给了我/foo/boo 作为变量 foo 的内容(而不仅仅是foo/boo)。

我试过这段代码:

poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)

我得到了相同的输出(/foo/boo 而不是foo/boo)。

如何只匹配foo/boo 部分?

【问题讨论】:

    标签: regex regex-lookarounds lookbehind


    【解决方案1】:

    嘿试试下面的正则表达式:

    (?<=/).*(?=/poo)
    ^^^^^^
    

    它不会考虑结果中的第一个斜线。

    测试regex101https://regex101.com/r/yzMkTg/1

    按以下方式转换您的代码,它应该可以工作:

    poo = "poo"
    foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
    

    快速查看此链接,了解有关Positive lookaheadPositive lookbehind 行为的更多信息

    http://www.rexegg.com/regex-quickstart.html

    【讨论】:

    【解决方案2】:

    您在后视中缺少&lt;

    Lookbehinds 看起来像这样:

    (?<=...)
    

    不是这样的:

    (?=...)
    

    这将是一个展望提前

    所以,

    (?<=/).*(?=/poo)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多