RegEx。是否可以创建在不同的行中设置不同的组的搜索模式?

RegEx。是否可以创建在不同的行中设置不同的组的搜索模式?

我想要一个搜索模式,可以在不同的行中搜索不同的字符串。

code:
M90
G90
G71
G75
G00
G97 S16000
G00 T1
G00 X123.4437 Y149.1445 Z-12.0
M12
G00
G01 Z1.5 F50.0
G01 X121.1585 Y147.6211 F60.0
...........

I would like to search for:

M90
G90
G71
G97 S16000 
F60.0

然后将每个模式设置为单独的组,然后使用替换模式来:

M90 delete
G90 keep
G71 replace with G21
G97 S10000 replace with M3 S10000
M12 replace with G64 P2 

因此,经过处理后:

G90
G21
G75
G00
M3 S16000
G00 T1
G00 X123.4437 Y149.1445 Z-12.0
G64 P2
G00
G01 Z1.5 F[50.0*60]
G01 X121.1585 Y147.6211 F[60.0*60]

目前,我可以轻松搜索和替换单个模式;理想情况下,我希望一个搜索脚本和一个替换脚本执行所有操作。


顺便说一句:我发现了一个开源的 c#效用在网络上批量替换任何文件中的字符串,因此您可以为其提供搜索模式和替换模式并选择文件所在的文件夹并按 GO。它会处理文件夹中的所有文件。

例如我使用 F(\d.*) to search and F[$1*60] to replace..

原文:

G01 X121.1585 Y147.6211 F60.0

加工生产线:

G01 X121.1585 Y147.6211 [F60.0*60]

RegEx 非常棒!

感谢您的关注。弗兰克

答案1

这是使用 Notepad++ 的纯正则表达式解决方案。


  • Ctrl+H
  • 找什么:(?:^(?:(G71)|(G97(?= S16000))|(M12)|M90)(\R?))|F([\d.]+)
  • 用。。。来代替:(?1G21$4)(?2M3)(?3G64 P2$4)(?5F[$5*60])
  • 查看 相符
  • 查看 环绕
  • 查看 正则表达式
  • Replace all

解释:

(?:                 # non capture group
    ^                   # beginning of line
    (?:                 # non capture group
        (G71)               # group 1, G71
      |                 # OR
        (G97                # group 2, G97
            (?= S16000)     # positive lookahead, make sure we have S16000 after
        )                   # end group 2
      |                 # OR
        (M12)               # group 3, M12
      |                 # OR
        M90                 # M90
    )                   # end group
    (\R?)               # group 4, optional linebreak
)                   # end group
|                   # OR
F([\d.]+)           # F followed by digits and dot, save in group 5

替代品:

(?1                 # if group 1 exists,
    G21                 # replace with G21
    $4                  # ans linebreak
)                   # end if
(?2                 # if group 2 exists
    M3                  # replace with M3
)                   # end if
(?3                 # if group 3 exists
    G64 P2              # replace with G64 P2
    $4                  # and linebreak
)                   # end if
(?5                 # if group 5 exists
    F[$5*60]        # replace with F and [, content of group 5, *60, ]
)

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容