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

从regex捕获python

  •  0
  • user3525290  · 技术社区  · 6 年前

    我正在写一个正则表达式来查找 ? 捕捉之前的一切。这是我到目前为止所拥有的。

    f = 'file.doc?gs_f'
    f1 = re.search(r'(\?)',f)
    print(f[:f1.start()]) #prints "file.doc"
    

    如何使用regex在 ? . 它被称为“后看”,但我不确定如何使用它。

    4 回复  |  直到 6 年前
        1
  •  1
  •   Amit Amola    6 年前

    这是可行的:

    ^[^\?]+
    

    使用findall:

    f = 'file.doc?gs_f'
    f1 = re.findall("^[^\?]+",f)
    

    您可以看到一个regex在下面为任何类型的字符串工作: Regex_Working

        2
  •  1
  •   Jan    6 年前

    多种可能性:

    1. 要么一切都不是问号: [^?]+
    2. 或者是一个懒惰的量词,捕捉组: (.+?)\?
    3. 或者积极的展望: .+?(?=\?)

    参见相应的演示 regex101.com ( 1 , 2 3 )

        3
  •  1
  •   mad_    6 年前

    你不需要回头看。

    f = 'file.doc?gs_f'
    re.search(r'([\w\.]*(?=\?))',f).group(0)
    

    这里很好 Regex lookahead, lookbehind and atomic groups

        4
  •  1
  •   Deep    6 年前

    是的,这叫做积极的展望。你必须向前看直到 ? 来。这是执行您的请求的regex。如果你有任何问题,请告诉我。

    Regex: '.*(?=\?)'

    在这里,
    .* 会把一切都拉出来。
    (?=) 是正面的展望吗
    \ 问号符号的转义符。因为问号符号是regex中的量词。