如何替换一段文字中某些文字为同样数量的另一些文字? Topic is solved

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

jklop000
Posts: 4
Joined: 04 Apr 2021, 03:21
GitHub: jklop000

如何替换一段文字中某些文字为同样数量的另一些文字?

04 Apr 2021, 03:45

比如有以下一段文字:
爱财如命——(挥金如土) 异口同声——(众说纷纭)
爱不释手——(弃若屐) 半途而废——(坚持懈)
一丝——(大叶) 古今——(坐天)

现在,我想将像“(挥金如土)”,这样结构的括号内的文字变成“(空空空空)”,按这个想法替换正确应该是下面这样:
爱财如命——(空空空空) 异口同声——(空空空空)
爱不释手——(空空空) 半途而废——(空空空)
一丝——(空空) 古今——(空空)

试了通过正则表达式,没有找到好的办法,有高人能指点一下吗?
sanmaodo
Posts: 19
Joined: 28 Aug 2020, 01:39

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

04 Apr 2021, 09:29

这是一个笨拙的方法,希望能给你一点启发

Code: Select all

text := "爱财如命——(挥金如土) 异口同声——(众说纷纭)"
      . "爱不释手——(弃若屐) 半途而废——(坚持懈)"
      . "一丝——(大叶) 古今——(坐天)"

re := ["空", "空空", "空空空", "空空空空"]

while RegExMatch(text, "(?<=()[^()空\x00-\xff]*(?=))", str) > 0
{
  text := RegExReplace(text, "(?<=()[^()空\x00-\xff]*(?=))", re[StrLen(str)], , 1)
  msgbox % text
}
feiyue
Posts: 272
Joined: 08 Aug 2014, 04:08

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?  Topic is solved

04 Apr 2021, 10:55

可以这样做:

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
sikongshan
Posts: 11
Joined: 06 Jul 2019, 21:57

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

06 Apr 2021, 03:47

我也来一个

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%
sanmaodo
Posts: 19
Joined: 28 Aug 2020, 01:39

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

06 Apr 2021, 09:07

@sikongshan
这一句好给力,我又学到一招,谢谢!

Code: Select all

text:=RegExReplace(text,"(.{" A_Index "})","【" kong "】")
期待更多的方法 :clap:
sikongshan
Posts: 11
Joined: 06 Jul 2019, 21:57

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

08 Apr 2021, 05:10

:D 请教了一下正则达人相关正则,可以精简一下,省掉替换步骤:

Code: Select all

Loop
	text:=RegExReplace(text,"([^()]{" A_index "})","(" (kong.="空") ")")
until not regexmatch(text,"([^()]*[^空()]+[^()]*)")
MsgBox %text%
jklop000
Posts: 4
Joined: 04 Apr 2021, 03:21
GitHub: jklop000

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

09 Apr 2021, 19:28

非常感谢以上几位世外高人的指点!!非常感谢!!!
jklop000
Posts: 4
Joined: 04 Apr 2021, 03:21
GitHub: jklop000

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

09 Apr 2021, 20:44

@sikongshan 非常感谢!!不过有个小问题,就是kong这个变量要在Loop前清空一次,不然多次替换的时候会出现多个“空空空空……”
sikongshan
Posts: 11
Joined: 06 Jul 2019, 21:57

Re: 如何替换一段文字中某些文字为同样数量的另一些文字?

10 Apr 2021, 07:00

jklop000 wrote:
09 Apr 2021, 20:44
@sikongshan 非常感谢!!不过有个小问题,就是kong这个变量要在Loop前清空一次,不然多次替换的时候会出现多个“空空空空……”
是的,在每个Loop前必须加一个清空

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 5 guests