找回密码
 加入
搜索
查看: 2801|回复: 6

[效率算法] 求助 正则表达式 去除某个匹配字符串中间的某个字符(已解决)

  [复制链接]
发表于 2016-4-19 16:53:30 | 显示全部楼层 |阅读模式
本帖最后由 tubaba 于 2017-7-7 14:25 编辑

正则表达式 去除某个匹配字符串中间的某个字符
OK,举个例子来说:
a boy who was in my class at school
【a boy who was in my class at school】
假设我想要去掉【】里面的空格符,该如何表达.
即变成这样:
a boy who was in my class at school
【aboywhowasinmyclassatschool】
上句不变,下句去掉空格.


解决方法:
匹配2次.先找出所有【】内容,再替换空格
发表于 2016-4-19 17:39:05 | 显示全部楼层
分两步,先提取再替换。
 楼主| 发表于 2016-4-19 18:04:42 | 显示全部楼层
回复 2# haijie1223


    只能这样子吗?如果我有几万个这样的匹配,要替换其中的某个字符,那不是要替换几万次.

stringregreplace的反向引用 $1,能支持处理后的$1吗?比如形如 stringreplace('$1','空格','')这种形式
发表于 2016-4-19 20:55:18 | 显示全部楼层
本帖最后由 hnfeng 于 2016-4-19 21:06 编辑

如果是我,这样:
1、StringRegExp 把 $t_text 里面的以“【” 开始 以“ 】”结束的字符串取到一个数组中 $a_AAA
2、数组内容去除重复,用 _ArrayUnique
3、使用 for $i=0 to ubound($a_AAA)-1  循环,
     $t_tmp=StringReplace($a_AAA[$i], " ", "")  -- 把空格删掉,
     然后使用 StringReplace 替换 $text 里面的内容  $t_text=StringReplace($t_text, $a_AAA[$i], $t_tmp)
发表于 2016-4-20 10:40:17 | 显示全部楼层
以前问过同样需求的问题,不过是匹配,不是替换。
(?!.*【)[^ ]+(?=.*】)
但是实际运用起来,匹配2次效率还高些。
发表于 2016-4-20 12:20:52 | 显示全部楼层
以前问过同样需求的问题,不过是匹配,不是替换。但是实际运用起来,匹配2次效率还高些。
zch11230 发表于 2016-4-20 10:40



    一般确实如此,要顾前要顾后的,崩溃都有可能。
 楼主| 发表于 2017-7-7 14:24:06 | 显示全部楼层
回复 5# zch11230


    懂了,匹配2次
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 00:20 , Processed in 0.172145 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表