我正试图解析一个gcode程序,以返回除了包含在ing()中的注释之外的所有内容。非否定版本的工作方式是:([(].*[)])仅返回注释。为什么下面的模式不返回除注释以外的所有内容?地址:
(?!([(].*[)]))
%
O1000
T1 M6
G0 G90 G40 G21 G17 G94 G80
G54 X-75 Y-25 S500 M3 (Start Point)
G43 Z100 H1
Z5
G1 Z-20 F100
X-50 M8 (Position 1)
Y0 (Position 2)
X0 Y50 (Position 3)
X50 Y0 (Position 4)
X0 Y-50 (Position 5)
X-50 Y0 (Position 6)
Y25 (Position 7)
X-75 (Position 8)
G0 Z100
M30
%
正则表达式上的几个注释:
(?![(].*[)])
匹配一个空格,该空格后面没有(
,除了换行符以外的任何0+字符,直到行上的最后一个)
。所以,你只有一个零长度匹配-难怪你什么也得不到。你知道吗如果注释是行中的最后一个
(...)
,并且它们不能包含括号,请将re.sub
与见the regex demo。替换为空字符串。你知道吗
图案细节:
\s*
-零个或多个空格\(
-一个开口(
[^()]*
-除(
和)
之外的零个或多个字符\)
-结束语)
[ \t]*
-零个或多个空格或制表符(可以替换为[^\S\r\n]
)$
—行的结尾(因为使用了(?m)
(re.MULTILINE
))。你知道吗Python demo:
因为一个否定的lookahead不用于否定一个完整的regex(也就是说,它不用于匹配给定regex是什么的反义词)。在这一点上,我们习惯于说,在文本中展望未来是不可能匹配这个正则表达式的。你知道吗
更简单的例子是,我们知道这是用来匹配所有数字的:
好吧,为了匹配所有不是数字的东西,我们不能这样做:
因为那样做不行。这意味着,在匹配的当前位置,确保向前看,我们没有数字。
\d
的实际否定有自己的字符类:根据示例代码,可以使用此正则表达式匹配所有非注释的内容:
Try it
相关问题 更多 >
编程相关推荐