免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4934 | 回复: 14
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-31 17:04 |只看该作者 |正序浏览
如题:

我有两个文件,一个是英文,另外一个是英文翻译过来的中文。 如下:

英文文件:
mainframe white PaPer
MainfraMe       Buffer-to-Buffer Credits and Their effect on FICON Performance
Having a sufficient number of buffer-to-buffer credits is essential to maintaining maximum FICON®  performance, especially as distance increases.
But how many buffer credits do you need?
In this paper, Brocade®  provides

中文文件:
大型机白皮书
大型机  缓冲区到缓冲区信用及其对 FICON 性能的影响
具有足够数量的缓冲区到缓冲区信用对于保持最高 FICON® 性能至关重要,尤其是在距离增加时。
但是,您需要多少缓冲区信用?
在本白皮书中,Brocade® 提供了

我现在希望同时在两个文件中删除红色标记的字符串。

自己尝试使用\p{Han}去匹配中文里面非中文字符,但是没有成功。求大拿们指导

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

多谢大侠~

这也是个思路。


   

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


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

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

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

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

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


   

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


跟这个想法类似。

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

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

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

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


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
10 [报告]
发表于 2013-01-31 20:47 |只看该作者
本帖最后由 mcshell 于 2013-01-31 20:53 编辑
  1. use strict;
  2. use warnings;
  3. use encoding "utf8";
  4. while(<DATA>){
  5.    s/(\s*[A-Za-z]+[\p{S}\p{N}\p{C}\p{M}]+\s+|\b[A-Z]+\b)//g;
  6.     print ;
  7. }
  8. __DATA__
  9. 大型机白皮书
  10. 大型机  缓冲区到缓冲区信用及其对 FICON 性能的影响
  11. 具有足够数量的缓冲区到缓冲区信用对于保持最高 FICON&reg; ; 性能至关重要,尤其是在距离加时。
  12. 但是,您需要多少缓冲区信用?
  13. 在本白皮书中,Brocade&reg;  提供了
  14. mainframe white PaPer
  15. MainfraMe       Buffer-to-Buffer Credits and Their effect on FICON Performance
  16. Having a sufficient number of buffer-to-buffer credits is essential to maintaining maximum FICON&reg; ;  performance, especially as distance increases.
  17. But how many buffer credits do you need?
  18. In this paper, Brocade&reg; ;  provides
复制代码
回复 1# LOSTKILLER


    求解 为啥圈圈商标放论坛编辑器里就转成&reg  
@rubyish怎么打出来的  求学习{:3_200:}

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2013-01-31 18:25 |只看该作者
不知道:
  1. #!/usr/bin/perl
  2. use 5.016;

  3. my $h = '大型机白皮书
  4. 大型机  缓冲区到缓冲区信用及其对 FICON 性能的影响
  5. 具有足够数量的缓冲区到缓冲区信用对于保持最高 FICON® 性能至关重要,尤其是在距离增加时。
  6. 但是,您需要多少缓冲区信用?
  7. 在本白皮书中,Brocade® 提供了';
  8. my $e = 'mainframe white PaPer
  9. MainfraMe       Buffer-to-Buffer Credits and Their effect on FICON Performance
  10. Having a sufficient number of buffer-to-buffer credits is essential to maintaining maximum FICON®  performance, especially as distance increases.
  11. But how many buffer credits do you need?
  12. In this paper, Brocade®  provides';

  13. my @d;
  14. $h =~ s/\s*([A-Z]\S+\s+)(?{push @d,$1})//g;
  15. my $d = join '|', @d;
  16. $e =~ s/\s+$d/ /g;
  17. say $e;
  18. say $h;
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-01-31 18:22 |只看该作者
LOSTKILLER 发表于 2013-01-31 17:47
回复 4# q1208c


你这是作甚?把所有的中文替换成xx?

论坛徽章:
0
7 [报告]
发表于 2013-01-31 18:19 |只看该作者
1、先把中文中需要替换的单词提出,放到一个hash里。
2、提取英文中所有以空格分隔的单词,逐个比对hash,如果hash中 已经有以此单词为key的条目,就意味着这个单词是中文中出现过的,需要删除。

方法比较笨,有好方法的请指点。
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP