免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: LOSTKILLER
打印 上一主题 下一主题

如何删除两个句子中相同的字符串 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-02-01 17:16 |只看该作者
回复 9# rubyish


跟这个想法类似。

先把中文句子里面非中文符号提取出来放到一个数组,然后把英文句子查找替换一遍。

$h =~ s/\s*([A-Z]\S+\s+)(?{push @d,$1})//g;

这个正则可以匹配到字母,但是中文句子可能还有很多非中文的UNICODE字符,比如那个商标注册符号。

另外我那个脚本为什么 \p{Han}这个正则表达式不生效?


   

论坛徽章:
0
12 [报告]
发表于 2013-02-01 17:44 |只看该作者
回复 6# iLRainyday

所有非中文替换为XX。\p{Han}可以实现了~

不过空格还有其他字符都也替换掉了


   

论坛徽章:
0
13 [报告]
发表于 2013-02-01 18:26 |只看该作者
本帖最后由 iLRainyday 于 2013-02-01 18:42 编辑

回复 12# LOSTKILLER

如果你确定中文中需要替换的英文单词是以单个空格或者中英文标点分隔(就像你的样本中那样),那么使用下面的regex来匹配:
  1. (?<=\s|\p{P})[A-Z]+?\p{S}?(?=\s)
复制代码

论坛徽章:
0
14 [报告]
发表于 2013-02-01 18:31 |只看该作者
LOSTKILLER 发表于 2013-02-01 17:16
回复 9# rubyish


\P{Han}才匹配非中文字符(这里的P是大写)。

你找本learning perl,把里面有关unicode的内容看完你就知道为什么了。

论坛徽章:
0
15 [报告]
发表于 2013-02-04 14:06 |只看该作者
回复 13# iLRainyday

多谢大侠~

这也是个思路。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP