如何将多个字符串的正则表达式匹配字符串项替换多个其他字符串

&&&&&& 最近经常用到替换的东西所以就出来整理下,这里要分享的是正则表达式里面的替换原则,首先要声明的是这里提及到的替换原则是.NET里面的正则表达式的替换原则。先看一下替换的定义替换是只能在替换模式中识别的语言元素。&它们使用正则表达式模式定义全部或部分用于替换输入字符串中的匹配文本的文本。&替换模式可以包含一个或多个替换以及本文字符。其实个人总结的替换的大致是这样的,替换的内容永远都是原文本的内容,通过正则表达式匹配出来文本,来通过组名或者组号来进行对原文本的替换,替换的位置是用正则表达式匹配出来的内容。还有我已经在前面写了三篇关于正则的文章了,最近用到替换内容,详细分享来~,好了,废话不多说了下面进入正题吧~
二、替换原则
&&&&&& .NET下面定义了下表的替换元素:
包括替换字符串中的由&number&标识的捕获组所匹配的最后一个子字符串,其中&number&是一个十进制值。
包括替换字符串中由&(?&name& )&指定的命名组所匹配的最后一个子字符串。
包括替换字符串中的单个&$&文本。
包括替换字符串中整个匹配项的副本。
包括替换字符串中的匹配项前的输入字符串的所有文本。
包括替换字符串中的匹配项后的输入字符串的所有文本。
包括在替换字符串中捕获的最后一个组。
包括替换字符串中的整个输入字符串。
  ①&&& $number替换元素
  通过一系列的例子来进行讲解这些正则表达式的用法以及替换原则。首先我们要提出一个需求,需求的内容是将一串匹配的数字变成千分位匹配。比如我们现在输入一串金额为,怎么样将它转换成123,456,789这种形式。通过开篇里面我总结的内容来看,首先我们要将3,6这两个数字匹配出来,然后将3替换成3,将6替换成6,这样想要的效果就达到了,但是要注意的是后面也就是匹配这个数字的前提是后面跟的数字必须以3个数字为组的一串数字比如3后面是456789,(456),(789)是2个三位数字的,了解了匹配的内容之后,开始来写正则。我们仅仅之匹配一个字符放到组里面,那么就是(\d)这个数字否面跟的是一组或多组三位数字。那个就要用到零宽度断言,这样后面的正则就出来(\d)(?=(\d{3})+(?!\d)),正则表达式就这样写完了,接下来就要进行分析替换了。先看一下正则表达式匹配的内容。
  上图表示了整个正则表达式匹配的内容有两个一个是匹配的3,另一个匹配的是6。将正则表达式的模式调整为替换模式,替换模式后可以用上表格中的第一个方法进行替换,也就是已经将3,6分了组号第0组或第1组都可以。详细看一下下图所示:
  其实总结到这里的替换原则其实是根据匹配的内容来进行替换的,因为第一张图匹配的内容有两组,第一组替换之后的内容是123,46789,第二次进行替换的时候是在前一次替换的基础上进行替换将6替换成6,这是内容就变成了123,456,789。
  ②& &${&name&}替换原则
  将上面正则表达式变换一下就好了,给第一个组分配一个组号,这样整个正则表达式就变成这个样子:(?'test'\d)(?=(\d{3})+(?!\d)),这是后替换的原则就变成这个样子,详情请见下图,原理都是一样的。
  ③& &&$$匹配元素
  $$匹配元素是在匹配的内容插入一个&$&字符,其实个人感觉两个$$就像当于是转意字符的意思。将元字符$变成普通字符。下面有一个需求就是我们匹配一串浮点数字,将浮点数字转换为货币。例如钱数为12.36,15.66,15.56这个正则表达式还算简单的,也就是([0-9.]+),先来看以下匹配的内容,如下图所示:
  匹配出来的三组内容,这个应该好理解了,下面的替换内容为:
  ④& $&替换元素
  $&表示的含义就是整个正则表达式的匹配的内容也就是第0组里面的内容。可以将上述的正表达式进行改造一下,在前面加一个数字5。正则表达式就变成了这样5([0-9.]+),那么原文本前面也加一个5这样就不会变太多。匹配结果如下所示:
  通过替换可以得到下面的结果:
  ⑤& &&$`和$'替换元素
这两个替换元素基本上是一样的只不过一个匹配的是前面的元素一哥匹配的是后面的元素,这里就根据一个例子进行讲解吧,比如一串字符中包含数字和因为字母,这时候想把这些汉字替换成汉字所在的位置前面的内容。这时候就需要用到$`根据一个例子来看一下这个的用法:(如下图所示)($`包括替换字符串中的匹配项前的输入字符串的所有文本。)
  当我们开启替换模式时,它会根据整个表达式匹配的内容进行替换。先来看一下替换的结果再来进行分析:
  详细分析根据在查找模式时,会有三组内容匹配出来了,也就是1,2,3这三个数字,首先替换的是1这个整体表达式匹配的内容,将1替换成原文本1前面的所有元素这时候整个字符串就变成了aabbaabbccdd2eeff3注意加红色的位置是替换的位置,这时候会进行下一轮替换,下一轮将2替换成原文本这里一直在强调的是原文本而不是上一次替换的内容,这时候我们来看一下原文本2前面的内容为aabb1ccdd2eeff3,这是替换之后的内容是aabbaabbccddaabb1ccddeeff3,这是红色的位置是替换2之后的内容,3前面内容是aabb1ccdd2eeff3这时候将3替换之后就是这个文本aabbaabbccddaabb1ccddeeffaabb1ccdd2eeff,替换完毕。
  Ok分析到这里吧其他的原则都是一样的,等大家自己去分析吧~~,通过上面的分析.NET再也不担心我的正则表达式替换用不好了~~~
三、结束语
&&&&&& 如果上述分析内容有错误还望各位指出,小丁再次谢过了。这里我想说的是Msdn里面资料还是很全的,大家可以学习的话首选还是Msdn。
阅读(...) 评论()新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID7617731空间积分0 积分11阅读权限10帖子精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
白手起家, 积分 11, 距离下一级还需 189 积分
帖子主题精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
论坛徽章:0
我现在有个文件file,第一行为:
copy_file,copy_folder,create_auth,create_folder,create_team,create_user,delete_file,delete_folder,delete_team,delete_user,download_file,login,move_file,move_folder,rename_file,rename_folder,update_user,upload_file
这是从数据库里查询后排序得出的,总共就18个字符,但有时查出的结果可能会少几个。现在的问题是,我需要每次生成这个文件后,把这一行英文字符替换为相应翻译过来的中文,请高手们不吝赐教!!谢谢
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分11916阅读权限90帖子精华可用积分11916 信誉积分2898 专家积分0 在线时间3821 小时注册时间最后登录
大富大贵, 积分 11916, 距离下一级还需 8084 积分
帖子主题精华可用积分11916 信誉积分2898 专家积分0 在线时间3821 小时注册时间最后登录
认证徽章论坛徽章:41
怎么替换? 翻译的中文你咋不提供?
Bash/Awk/Sed CU联盟:
UID空间积分860 积分52939阅读权限100帖子精华可用积分52939 信誉积分3806 专家积分105 在线时间12312 小时注册时间最后登录
招聘 : 帖子主题精华可用积分52939 信誉积分3806 专家积分105 在线时间12312 小时注册时间最后登录
认证徽章论坛徽章:93
sed '1s/copy_file/复制文件/; 1s/copy_folder/复制文件夹/' a.txt复制代码其它几个自己往后加吧
中国惠普有限公司招聘:
UID7617731空间积分0 积分11阅读权限10帖子精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
白手起家, 积分 11, 距离下一级还需 189 积分
帖子主题精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
论坛徽章:0
这是翻译过来的
UID7617731空间积分0 积分11阅读权限10帖子精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
白手起家, 积分 11, 距离下一级还需 189 积分
帖子主题精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
论坛徽章:0
谢谢回复!
因为这行英文每次查询出来的次数不太一样,但最多也就这18种,所以你这种方法每次得重新写一次!
UID空间积分0 积分11916阅读权限90帖子精华可用积分11916 信誉积分2898 专家积分0 在线时间3821 小时注册时间最后登录
大富大贵, 积分 11916, 距离下一级还需 8084 积分
帖子主题精华可用积分11916 信誉积分2898 专家积分0 在线时间3821 小时注册时间最后登录
认证徽章论坛徽章:41
jick_120110
& & 那你直接将这十八个写死好啦...给你个简单的例子...[root@localhost tmp]# echo copy_file,copy_folder | awk -f f.awk
复制文件
复制目录
[root@localhost tmp]# cat f.awk
#!/bin/awk
& & a[&copy_file&] = &复制文件&
& & a[&copy_folder&] = &复制目录&
& & FS=&,&
}
& & for(i=1;i&=NF;i++)print a[$i]
}复制代码
Bash/Awk/Sed CU联盟:
UID7617731空间积分0 积分11阅读权限10帖子精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
白手起家, 积分 11, 距离下一级还需 189 积分
帖子主题精华可用积分11 信誉积分176 专家积分0 在线时间20 小时注册时间最后登录
论坛徽章:0
& & 太谢谢了,稍微变通下能完成我的需求了。
UID空间积分0 积分35799阅读权限90帖子精华可用积分35799 信誉积分5605 专家积分5 在线时间10347 小时注册时间最后登录
巨富豪门, 积分 35799, 距离下一级还需 4201 积分
帖子主题精华可用积分35799 信誉积分5605 专家积分5 在线时间10347 小时注册时间最后登录
论坛徽章:75
jick_120110
&&求高手! ...
高手(Shell_HAT)给解不用又怀疑?
依照写出来(的code),跑出结果
不是依照你想出来的,得到结果
问题本不难,你又不举例,
描述又乱写,让人费疑猜?
[ i ] it's not good in CU
i =& n =& num, cnt =& number, count
for(i =1;i &=X; i++) a[ i&&]=...
for(n=1;n&=X;n++) a[ n ]=
UID空间积分860 积分52939阅读权限100帖子精华可用积分52939 信誉积分3806 专家积分105 在线时间12312 小时注册时间最后登录
招聘 : 帖子主题精华可用积分52939 信誉积分3806 专家积分105 在线时间12312 小时注册时间最后登录
认证徽章论坛徽章:93
jick_120110
& & 不需要每次重写,你把18种都写上,没有问题。
中国惠普有限公司招聘:
UID空间积分0 积分285阅读权限20帖子精华可用积分285 信誉积分181 专家积分0 在线时间159 小时注册时间最后登录
稍有积蓄, 积分 285, 距离下一级还需 215 积分
帖子主题精华可用积分285 信誉积分181 专家积分0 在线时间159 小时注册时间最后登录
论坛徽章:0
sed里面你把要用的18种替换都写进去 没有的部分sed是不会处理的 没问题的> java中怎么同时替换多个字符有一组字符和另一组字符一一对应。现在对字符串要将上面所说的字符进行对
java中怎么同时替换多个字符有一组字符和另一组字符一一对应。现在对字符串要将上面所说的字符进行对
xingfudeyu & &
发布时间: & &
浏览:250 & &
回复:3 & &
悬赏:0.0希赛币
java中怎么同时替换多个字符有一组字符和另一组字符一一对应。现在对字符串要将上面所说的字符进行对应的替换,有一次实现的方法吗?
在php中可以用数组作为参数调用str_replace实现,不知道java中有没有类似的方法。
String replaceString(String src,String from, String to)
if(src == null || from == null ||
to == null || from.length() != to.length())
for(int i=from.length();i++)
src.replace(from.charAt(i),to.charAt(i));
xingfuxing & &
& & (0)(0)Sorry, 上面写错了
String replaceString(String src,String from, String to)
if(src == null || from == null ||
to == null || from.length() != to.length())
for(int i=0;i &from.length();i++)
src.replace(from.charAt(i),to.charAt(i));
xingfuhaitun & &
& & (0)(0)src = src.replace(from.charAt(i),to.charAt(i));xingfuteyue & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&吐槽一下百度搜索,怀疑其搜索质量。
以前用java开发的小工具为例,输入关键字【一次 替换 多个字符串】,在百度搜索里竟然找不到,翻了好几页也没有,2013年在百度搜索的第一页能找到的。再试试关键字【一次查找替换文本中多个字符串】,还是不能找到。
试试其它搜索引擎:搜狗/。用关键字【一次 替换 多个字符串】可以找到的。
下载解压后文件是可执行文件FindReplace3.exe。采用java开发,用exe4j将java程序转为exe可执行文件,以便在window操作系统使用,不需要安装其它任何文件。
打开界面如下(可以同时打开多个):
使用例子,将字符串【待替换字符串:】替换为【替换后字符串:】,如下图,找到个数为0,因为原文内容没有。
再试试将字符串【不一样】替换为【一样】,【一定】替换为【定会】,如下图,通过回车,将左边的一行替换为右边的一行。
如果尝试要把原文的【吃货】删除,把【的】改为【地】,可以在【吃货】栏对应的右边直接一个回车即可。如下图:
替换后结果,当然可以直接替换,不用先查找:
完毕,由于博客不能上传附件,所以只能链接到CSDN下载资源咯。
& (有还原功能的版本)
& (第一版)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34526次
排名:千里之外
转载:37篇
(1)(1)(1)(11)(29)}

我要回帖

更多关于 正则表达式匹配字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信