【问题标题】:Regular expression substitution in PythonPython中的正则表达式替换
【发布时间】:2025-11-28 10:00:01
【问题描述】:

我有一个字符串

line = "haha (as jfeoiwf) avsrv arv (as qwefo) afneoifew"

从此我想使用一些正则表达式删除"(as...)" 的所有实例。我希望输出看起来像

line = "haha avsrv arv afneoifew"

我试过了:

line = re.sub(r'\(+as .*\)','',line)

但这会产生:

line = "haha afneoifew"

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    要获得non-greedy behaviour,您必须使用*? 而不是*,即re.sub(r'\(+as .*?\) ','',line)。要得到想要的字符串,还需要加一个空格,即re.sub(r'\(+as .*?\) ','',line)

    【讨论】:

      【解决方案2】:

      问题是您的正则表达式与整个组匹配:(as jfeoiwf) avsrv arv (as qwefo),因此是您的结果。

      你可以使用:

      >>> import re
      >>> line = "haha (as jfeoiwf) avsrv arv (as qwefo) afneoifew"
      >>> line = re.sub(r'\(+as [a-zA-Z]*\)','',line)
      >>> line
      'haha  avsrv arv  afneoifew'
      

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        你们很亲密。您需要使用惰性量词“?”后 。*。默认情况下,它会尝试尽可能多地捕获最大的群体。使用惰性量词,它实际上会尝试匹配尽可能小的组。

        line = re.sub(r'\(+as .*?\) ','',line)
        

        【讨论】:

          【解决方案4】:

          试试:

          re.sub(u".\(as \w+\).", ' ',line)
          

          【讨论】:

            【解决方案5】:

            尝试:

            re.sub(r'\(as[^\)]*\)', '', line)
            

            【讨论】:

              最近更新 更多