我正在尝试解析 gcode 程序以返回除 () 中包含的注释之外的所有内容。非否定版本有效: ([(].*[)]) 仅返回注释。为什么下面的模式不返回除注释之外的所有内容?:
(?!([(].*[)]))
%
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
与
r'(?m)\s*\([^()]*\)[ \t]*$'
参见the regex demo 。替换为空字符串。
图案详细信息:
\s*
- 零个或多个空格\(
- 开头(
[^()]*
- 除(
和)
之外的零个或多个字符\)
- 结束)
[\t]*
- 零个或多个空格或制表符(您可以替换为[^\S\r\n]
)$
- 行结束(因为使用了(?m)
(=re.MULTILINE
))。
import re
p = re.compile(r'\s*\([^()]*\)[ \t]*$', re.MULTILINE)
s = "%\nO1000\nT1 M6\nG0 G90 G40 G21 G17 G94 G80\nG54 X-75 Y-25 S500 M3 (Start Point)\nG43 Z100 H1\nZ5\nG1 Z-20 F100\nX-50 M8 (Position 1)\nY0 (Position 2)\nX0 Y50 (Position 3)\nX50 Y0 (Position 4)\nX0 Y-50 (Position 5)\nX-50 Y0 (Position 6)\nY25 (Position 7)\nX-75 (Position 8)\nG0 Z100\nM30\n%"
result = p.sub("", s)
print(result)
关于python - 正则表达式返回除复合表达式之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37444764/