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>[ -~]+?))}}@