Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我';我告诉过它不要这样?_Python_Regex - Fatal编程技术网

Python 当我';我告诉过它不要这样?

Python 当我';我告诉过它不要这样?,python,regex,Python,Regex,我曾尝试将我的系统宏的以下内容编码为正则表达式(如下所示),但尽管我尽了最大努力,它似乎在多个宏之间进行了贪婪的匹配:它并没有在关闭时停止}@ Expand ``@{{...}}@`` references which may appear in Step parameters. The syntax is described by the following EBNF grammar:: depdata = "@{{", source identifier,

我曾尝试将我的系统宏的以下内容编码为正则表达式(如下所示),但尽管我尽了最大努力,它似乎在多个宏之间进行了贪婪的匹配:它并没有在关闭时停止
}@

    Expand ``@{{...}}@`` references which may appear in Step parameters.
    The syntax is described by the following EBNF grammar::

        depdata = "@{{", source identifier, ":", attribute, "}}@"
                | "@{{TAGS:", expression, "}}@" ;
        source identifier = ? printable 7-bit ASCII ? ;
        attribute = "DATADIR" | "TAGSFILE" | "RESULT_INT" ;
        expression = ? printable 7-bit ASCII ? ;
还有我提出的Python正则表达式

@{{(?:(?:(?P<id>.*?):(?P<attr>DATADIR|TAGSFILE|RESULT_INT))|TAGS:(?P<expr>.+?))}}@
我期待的比赛是:


  • @{TAGS:sTagsJob这里有一个正则表达式,它似乎可以满足您的需要:

    @{{(?:(?:(?P<id>[^:]*?):(?P<attr>DATADIR|TAGSFILE|RESULT_INT))|TAGS:(?P<expr>.*?))}}@
    
    @{{(?:(?:(?P[^::*?):(?P

    匹配1
    
    expr[8-37]`sTagsJob点与任何字符匹配(如果DOTALL模式关闭,则换行符除外).
    *
    *?
    匹配0个以上字符,只有
    *
    一次抓取所有内容,
    *?
    一步一步地抓取,在重试
    *?
    子模式之前检查后续子模式是否匹配。在这里,您混淆了“贪婪”的含义:请注意,正则表达式试图“以各种方式”找到匹配项,当字符串中的某个位置出现不匹配时,它会重试量化的子模式,引擎使用贪婪的量词回溯,它会尽一切努力获取匹配。懒惰的量词不能保证您的模式不会因为量词定义中的额外
    而过度激发

    因此,如果您不是真的想使用点匹配模式,那么请避免使用点匹配模式,如果模式是已知的。在这里,需要可打印的ASCII模式-然后使用它,不要依赖点匹配

    @{{(?P<id>TAGS|[ -~]+?):(?:(?P<attr>DATADIR|TAGSFILE|RESULT_INT)|(?P<expr>[ -~]+?))}}@
    
    @{{(?PTAGS|[-~]+?):(?:(?)

    请注意,
    [-~]
    匹配任何可打印的ASCII字符。请参阅

    模式匹配:

    • @{{
      -前导分隔符
    • (?PTAGS |[-~]+?)
      -一个
      id
      组匹配
      标记或1+可打印ASCII字符,但尽可能少,因为它也匹配
      (您可以通过前瞻限制字符类以排除
      或替换为
      [-9;-~]
      使模式更加优化,并使用此量词摆脱
    • -文字
    • (?:(?P此处:
      (?:(!}}}@)[-~]+
      。请参阅
    • }@
      -尾随分隔符

    虽然
    *?
    是“懒惰的”,但它仍然会尝试匹配尽可能多的字符以返回有效的匹配。如果需要保留组,请尝试:。我必须在ASCII表上查找
    [-~]
    ,以确定它是7位可打印ASCII。很好!请参见:)点匹配任何字符(如果DOTALL模式关闭,则为换行符).
    *
    *?
    匹配0个以上字符,只有
    *
    一次抓取所有内容,
    *?
    一步一步地抓取,在重试
    *?
    之前检查后续子模式是否匹配。您混淆了“贪婪”的含义这里。如果你不是真的想使用点匹配模式,如果模式是已知的,请避免使用点匹配模式。这里需要可打印的ASCII模式-然后使用它,不要依赖点匹配。
    *?
    匹配除换行符以外的任何字符,但根据语法描述,它应该匹配可打印的7位ASCII。
    [^:]*?
    (它只匹配任何字符,但
    )。
    MATCH 1
    expr    [8-37]  `sTagsJob << "job||ID||source"`
    
    MATCH 2
    id  [50-53] `job`
    attr    [54-61] `DATADIR`
    
    MATCH 3
    id  [79-82] `job`
    attr    [83-90] `DATADIR`
    
    @{{(?P<id>TAGS|[ -~]+?):(?:(?P<attr>DATADIR|TAGSFILE|RESULT_INT)|(?P<expr>[ -~]+?))}}@