【问题标题】:How can I modify this regex to match all three cases?如何修改此正则表达式以匹配所有三种情况?
【发布时间】:2011-09-20 04:17:57
【问题描述】:

我想测试一个方法是否出现在头文件中。这是我的三个案例:

void aMethod(params ...)
//void aMethod(params
// void aMethod(params
  ^ can have any number of spaces here

这是我目前所拥有的:

re.search("(?<!\/\/)\s*void aMethod",buffer)

Buf 这只会匹配第一种情况,而第二种情况。我该如何调整它以使其也与第三个匹配?

编辑:对不起,我没有正确表达自己。如果不在评论中,我只想匹配。很抱歉。

【问题讨论】:

  • 你想用(?&lt;!\/\/) 后面的负面外观来实现什么,这意味着你不想在评论行上匹配,但这意味着它应该只匹配第一种情况。
  • 在我的测试中,正则表达式匹配第一种和第三种情况,如预期的那样。 Geo,你确定,它匹配第一种和第二种情况?
  • 天啊!我没有表达清楚。如果不在评论中,我只想匹配。我再问一个问题。
  • 如果您想忽略 cmets,我建议您首先“预处理”您的文件以忽略/删除 cmets。如果您逐行处理文件,只需在搜索您的方法之前检查它是否是注释行。另见 pygments 的 clexer:pygments.org/docs/api/#lexers

标签: python regex


【解决方案1】:

编辑:好的,在你编辑之后,Geo,是这样的:

^(?<!\/\/)\s*void aMethod

【讨论】:

    【解决方案2】:

    如果您只是想查找 'void aMethod(params' 的所有外观,则可以使用以下命令:

    a = """void aMethod(params ...)
    //void aMethod(params
    // void aMethod(params
      ^ can have any number of spaces here"""
    from re import findall
    findall(r'\bvoid aMethod\b', a)
    

    或者:

    findall(r'(?:\/\/)?[ ]*void aMethod', a)
    

    【讨论】:

      【解决方案3】:

      对于三个选项:(?:\/\/)?\s*void aMethod

      【讨论】:

        【解决方案4】:

        试试这个正则表达式。

        (\/\/)?\s*void aMethod
        

        【讨论】:

          猜你喜欢
          • 2012-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-22
          • 2011-08-11
          • 2016-07-04
          • 1970-01-01
          • 2018-03-18
          相关资源
          最近更新 更多