正则表达式不包括记事本++搜索和替换中括号之间的文本
Regex excluding text between parentheses in Notepad++ search & replace
组,
这是我的第一个 post。我喜欢使用 Notepad++ 进行 cnc 程序 g 代码编辑。有时,程序会包含文字之间没有白色 space 的文本。注释包含在括号中。有时行包含注释,但大多数时候不是:
G90G10L2P1X-38.046Y-11.361Z-36.991(G54 B=0)
G90G10L2P1X5.68Y5.69
G54G00G90X0.0Y-5.0T53
G43H55Z6.0M8
S300M03
此正则表达式将在所有单词之间添加一个 space,但会跳过以括号结尾的行:
搜索:(.)([A-Z])(?!.*\))
替换:
到目前为止一切顺利。我想要的是在所有单词之间添加 spaces,只排除评论,而不是像上面那样跳过包含评论的整行。
任何想法或帮助将不胜感激!我一直在玩这个,谷歌搜索了很多都没有成功。
** 编辑了我的 POST 以显示更复杂的示例 2015 年 4 月 8 日:
(FILE NAME XY9032.010)
(SUB PR.321.322.323.327.328.329.325.324)
(** NONSENSE COMMENT TEXT 324 TO SHOW A DIFF POSSIBLE COMB AB 2/25/15 **)
N1(STORE TOP BOSS G55.X)
N2(STORE BOT. BOSS G55.X)
N3(STORE BOT. BOSS G55.Y)
G00G17G40G49G80G90
G91G28X0Y0Z0.M05
G90G0B0
N4G90G10L2P5X-38.046Y-11.361Z-37.021(G58 B0 BOTTOM BORES)
N5G90G10L2P6X-23.130Y-11.361Z-44.027(G59 B180 BOTTOM BORE)
G90G10L2P1X#568Y#569
G54G00G90X0.0Y-5.0T53
G43H55Z6.0M8
S300M03
Z.6
N6G01Z.015F50.
G01Y-7.0F9.0
G02J7.0F18.0
G00Z6.0M09
G91G28X0Y0Z0M05
M1
这个小正则表达式将找到括号内文本的所有实例:
(\(.+\))
例如,搜索:
(\(.+\))
替换:
****
将在文本文件中的每个括号实例后添加星号。
我只是想不出如何从更广泛的搜索中排除相同的正则表达式,如本文其他地方所述 post。
这不起作用 - 仍然在括号内添加 spaces。下划线=space:
Search: (?!\(.+\))([a-z]-?\d+(?:\.\d+)?)
Replace: _
如果您将 'word' 定义为字母后跟数字,则此正则表达式将捕获它们:
([a-zA-Z][0-9.-]+)
然后你可以将它们替换为
(反斜杠一个space)。
这个适合你吗:
查找内容:(?<!\()([a-z]-?\d+(?:\.\d+)?)
替换为:_
我使用 _
来可视化 space
对于您的测试用例,它给出:
G90 G10 L2 P1 X-38.046 Y-11.361 Z-36.991 (G54 B=0)
G90 G10 L2 P1 X5.68 Y5.69
G54 G00 G90 X0.0 Y-5.0 T53
G43 H55 Z6.0 M8
S300 M03
很难确定您真正认为什么是 "word",但是根据您的示例和评论,我已经将我认为您想要的内容放在一起。无论哪种方式,这都不是您真正的问题。问题是排除评论,这是有效的:
搜索:(\(.*?\))|([a-z](?=[-#.\d])([-#]?\d*(\.\d*)?))
替换:_
[space 的下划线]
交替的第一部分,(\(.*?\))
,捕获任何评论,将它们吞噬,这样它们就不会被交替的第二部分匹配
注意:您最终会在每行的末尾得到一个 space,但在 Notepad++ 菜单上这是一个简单的 trim。
嗨,我也是一名 fanuc 程序员...我使用 notepad++
我来了
(\(.*?\))|([0-9]|(]))([A-Z])
并替换为
最后放一个 space 但是...
然后我将 (])
添加到
x#750z0
我有另一个选择。
搜索:((.?))|([.?])|([0-9]|(]))([A-Z])|(( ])(然后|做|转到))([A-Z])
写入:\5
组,
这是我的第一个 post。我喜欢使用 Notepad++ 进行 cnc 程序 g 代码编辑。有时,程序会包含文字之间没有白色 space 的文本。注释包含在括号中。有时行包含注释,但大多数时候不是:
G90G10L2P1X-38.046Y-11.361Z-36.991(G54 B=0)
G90G10L2P1X5.68Y5.69
G54G00G90X0.0Y-5.0T53
G43H55Z6.0M8
S300M03
此正则表达式将在所有单词之间添加一个 space,但会跳过以括号结尾的行:
搜索:(.)([A-Z])(?!.*\))
替换:
到目前为止一切顺利。我想要的是在所有单词之间添加 spaces,只排除评论,而不是像上面那样跳过包含评论的整行。
任何想法或帮助将不胜感激!我一直在玩这个,谷歌搜索了很多都没有成功。
** 编辑了我的 POST 以显示更复杂的示例 2015 年 4 月 8 日:
(FILE NAME XY9032.010)
(SUB PR.321.322.323.327.328.329.325.324)
(** NONSENSE COMMENT TEXT 324 TO SHOW A DIFF POSSIBLE COMB AB 2/25/15 **)
N1(STORE TOP BOSS G55.X)
N2(STORE BOT. BOSS G55.X)
N3(STORE BOT. BOSS G55.Y)
G00G17G40G49G80G90
G91G28X0Y0Z0.M05
G90G0B0
N4G90G10L2P5X-38.046Y-11.361Z-37.021(G58 B0 BOTTOM BORES)
N5G90G10L2P6X-23.130Y-11.361Z-44.027(G59 B180 BOTTOM BORE)
G90G10L2P1X#568Y#569
G54G00G90X0.0Y-5.0T53
G43H55Z6.0M8
S300M03
Z.6
N6G01Z.015F50.
G01Y-7.0F9.0
G02J7.0F18.0
G00Z6.0M09
G91G28X0Y0Z0M05
M1
这个小正则表达式将找到括号内文本的所有实例:
(\(.+\))
例如,搜索:
(\(.+\))
替换:
****
将在文本文件中的每个括号实例后添加星号。
我只是想不出如何从更广泛的搜索中排除相同的正则表达式,如本文其他地方所述 post。
这不起作用 - 仍然在括号内添加 spaces。下划线=space:
Search: (?!\(.+\))([a-z]-?\d+(?:\.\d+)?)
Replace: _
如果您将 'word' 定义为字母后跟数字,则此正则表达式将捕获它们:
([a-zA-Z][0-9.-]+)
然后你可以将它们替换为(反斜杠一个space)。
这个适合你吗:
查找内容:(?<!\()([a-z]-?\d+(?:\.\d+)?)
替换为:_
我使用 _
来可视化 space
对于您的测试用例,它给出:
G90 G10 L2 P1 X-38.046 Y-11.361 Z-36.991 (G54 B=0)
G90 G10 L2 P1 X5.68 Y5.69
G54 G00 G90 X0.0 Y-5.0 T53
G43 H55 Z6.0 M8
S300 M03
很难确定您真正认为什么是 "word",但是根据您的示例和评论,我已经将我认为您想要的内容放在一起。无论哪种方式,这都不是您真正的问题。问题是排除评论,这是有效的:
搜索:(\(.*?\))|([a-z](?=[-#.\d])([-#]?\d*(\.\d*)?))
替换:_
[space 的下划线]
交替的第一部分,(\(.*?\))
,捕获任何评论,将它们吞噬,这样它们就不会被交替的第二部分匹配
注意:您最终会在每行的末尾得到一个 space,但在 Notepad++ 菜单上这是一个简单的 trim。
嗨,我也是一名 fanuc 程序员...我使用 notepad++
我来了
(\(.*?\))|([0-9]|(]))([A-Z])
并替换为
最后放一个 space 但是...
然后我将 (])
添加到
x#750z0
我有另一个选择。
搜索:((.?))|([.?])|([0-9]|(]))([A-Z])|(( ])(然后|做|转到))([A-Z])
写入:\5