比如有以下一段文字:
爱财如命——(挥金如土) 异口同声——(众说纷纭)
爱不释手——(弃若屐) 半途而废——(坚持懈)
一丝——(大叶) 古今——(坐天)
现在,我想将像“(挥金如土)”,这样结构的括号内的文字变成“(空空空空)”,按这个想法替换正确应该是下面这样:
爱财如命——(空空空空) 异口同声——(空空空空)
爱不释手——(空空空) 半途而废——(空空空)
一丝——(空空) 古今——(空空)
试了通过正则表达式,没有找到好的办法,有高人能指点一下吗?
如何替换一段文字中某些文字为同样数量的另一些文字? Topic is solved
Moderators: tmplinshi, arcticir
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
这是一个笨拙的方法,希望能给你一点启发
Code: Select all
text := "爱财如命——(挥金如土) 异口同声——(众说纷纭)"
. "爱不释手——(弃若屐) 半途而废——(坚持懈)"
. "一丝——(大叶) 古今——(坐天)"
re := ["空", "空空", "空空空", "空空空空"]
while RegExMatch(text, "(?<=()[^()空\x00-\xff]*(?=))", str) > 0
{
text := RegExReplace(text, "(?<=()[^()空\x00-\xff]*(?=))", re[StrLen(str)], , 1)
msgbox % text
}
Re: 如何替换一段文字中某些文字为同样数量的另一些文字? Topic is solved
可以这样做:
Code: Select all
text := "爱财如命——(挥金如土) 异口同声——(众说纷纭)"
. "爱不释手——(弃若屐) 半途而废——(坚持懈)"
. "一丝——(大叶) 古今——(坐天)"
;-- 生成100个 “空” 字符
s:=StrReplace(Format("{:0100d}",0), "0", "空")
;-- 先收集所有需要替换的内容,暂时不替换
arr:=[], p:=1, r:=""
While p:=RegExMatch(text, "((.+?))", r, p+StrLen(r))
arr[r]:="(" SubStr(s,1,StrLen(r1)) ")"
;-- 统一进行替换
For k,v in arr
text:=StrReplace(text, k, v)
msgbox % text
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
@feiyue 学到知识了,感谢!!!
-
- Posts: 17
- Joined: 06 Jul 2019, 21:57
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
我也来一个
Code: Select all
text := "爱财如命——(挥金如土) 异口同声——(众说纷纭)"
. "爱不释手——(弃若屐) 半途而废——(坚持空懈) 半途而废——(坚持懈)"
. "一丝——(大叶) 古今——(坐天)古今——(坐空空天空空)"
Loop
{
kong.="空", text:=RegExReplace(text,"(.{" A_Index "})","【" kong "】") ;找到一两个文本里面没用到的符号临时用,比如此处用的【】
if not (regexmatch(text,"(.+)")) ;如果没有匹配了,则退出
break
}
text:=StrReplace(text,"【","("),text:=StrReplace(text,"】",")")
MsgBox %text%
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
@sikongshan
这一句好给力,我又学到一招,谢谢!
期待更多的方法
这一句好给力,我又学到一招,谢谢!
Code: Select all
text:=RegExReplace(text,"(.{" A_Index "})","【" kong "】")
-
- Posts: 17
- Joined: 06 Jul 2019, 21:57
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
请教了一下正则达人相关正则,可以精简一下,省掉替换步骤:
Code: Select all
Loop
text:=RegExReplace(text,"([^()]{" A_index "})","(" (kong.="空") ")")
until not regexmatch(text,"([^()]*[^空()]+[^()]*)")
MsgBox %text%
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
@sikongshan 更加强大了!
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
非常感谢以上几位世外高人的指点!!非常感谢!!!
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
@sikongshan 非常感谢!!不过有个小问题,就是kong这个变量要在Loop前清空一次,不然多次替换的时候会出现多个“空空空空……”
-
- Posts: 17
- Joined: 06 Jul 2019, 21:57
Re: 如何替换一段文字中某些文字为同样数量的另一些文字?
Code: Select all
;=====================================================================o
; Vscode Macro
;---------------------------------------------------------------------o
trimNumber() {
; vim focus last cursor, use regex to replace
WinActivate, ahk_exe Code.exe
sleep, 100
send, {text}mr
sleep, 100
send, ^r
send, !r ; activate regex
sleep, 100
send, {text}^(\d.?[. ]?)+
send, {Tab}
send, {Lshift down}{Home}{Lshift up}{Del}
sleep, 100
send, ^!{Enter}
send, {Esc}
sleep, 200
send, {text}'r
}
;---------------------------------------------------------------------o
案例来自实际。
提供另一种思路:
手头正好有 VsCode,充分利用它的查找和正则匹配的功能,将文字段落拷贝进里面,用 AHK 按快捷键处理。
同样,没有正则,你也可以放进 Word 处理。
你觉得简单能理解就好。
Who is online
Users browsing this forum: No registered users and 21 guests