查看: 364|回复: 6
打印 上一主题 下一主题

[求助] 求助正则表达式,大伙请进

[复制链接]

该用户从未签到

14

主题

131

回帖

1459

积分

解元

Rank: 5Rank: 5

积分
1459
跳转到指定楼层
1
发表于 2015-11-10 22:34:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAB
<h1>AAB</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Aircraft Accident Board 飞机失事管理局</b><br>
</>
AAB
<h1>AAB</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Aircraft Accident Board 飞机失事管理局</b><br>
</>


请教如何把重复的干掉

该用户从未签到

46

主题

468

回帖

3743

积分

贡士

Rank: 6Rank: 6

积分
3743

灌水大神章小蜜蜂章笑傲江湖章

2
发表于 2015-11-11 01:03:14 | 只看该作者
很多文本编辑器对正则的支持并不是作为首要的目标来考虑,所以它们的正则表达式特性并不完整,比如 Notepad2、Notepad++、EmEditor,这三个编辑器我测试过实现不了你要的匹配。一开始我还以为自己写错了,毕竟三个文本编辑器都没办法匹配我写的表达式,直到我不得已换了一个利器,用我写的表达式就 OK 了,:



搜索用的正则串:(.+\n.+\n</>\n)\1*
替换用的正则串:\1

原始内容:

AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAB
<h1>AAB</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Aircraft Accident Board 飞机失事管理局</b><br>
</>
AAB
<h1>AAB</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Aircraft Accident Board 飞机失事管理局</b><br>
</>

结果:

AAAT
<h1>AAAT</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Anti-Aircraft Armored Truck 防空装甲车</b><br>
</>
AAB
<h1>AAB</h1><p><font color="DarkMagenta"><i>abbr.</i></font><br><img src="file://dot.gif"><b>Aircraft Accident Board 飞机失事管理局</b><br>
</>


总结:

重复任意次都可以匹配。

建议:

大家可以使用 RegexBuddy 这个软件来测试正则表达式,它支持比较全,Python、Java8、C#(.Net 2.0 - 4.5)、HTML5(Chrome)、JavaScript(Chrome)、MySQL、Perl、PCRE 8.34-8.35 UTF-8、PHP、Ruby、R... 各种风格的正则引擎都支持。

但是不建议使用它来处理大文本,比如十几,几十,上几百兆这样的,在这一点上面,它就没有 EmEditor 的速度了。建议考虑其它方法。

该用户从未签到

19

主题

593

回帖

25万

积分

状元

Rank: 9Rank: 9Rank: 9

积分
259792

灌水大神章小蜜蜂章笑傲江湖章

3
发表于 2015-11-11 09:33:54 | 只看该作者
gnoweb 发表于 2015-11-11 01:03
很多文本编辑器对正则的支持并不是作为首要的目标来考虑,所以它们的正则表达式特性并不完整,比如 Notepad ...

如果是emeditor, 设定 “搜索正则表达的附加行” 就可以使用了..
数字默认是0, 设为6就只能找到6行, 设为30就可以找30行..

reg.jpg (144.04 KB, 下载次数: 0)

reg.jpg

该用户从未签到

46

主题

468

回帖

3743

积分

贡士

Rank: 6Rank: 6

积分
3743

灌水大神章小蜜蜂章笑傲江湖章

4
发表于 2015-11-11 09:54:14 | 只看该作者
sky66 发表于 2015-11-11 09:33
如果是emeditor, 设定 “搜索正则表达的附加行” 就可以使用了..
数字默认是0, 设为6就只能找到6行, 设 ...

谢谢指导,我说怎么这个能快速打开、流畅编辑大型文本的软件怎么会不支持这个功能。

该用户从未签到

14

主题

131

回帖

1459

积分

解元

Rank: 5Rank: 5

积分
1459
5
 楼主| 发表于 2015-11-11 13:05:28 | 只看该作者
非常感谢楼上的两位,问题解决了,不过我又发现新问题,还得请二位帮助

有些重复词条的内容并不是完全一样,如下

AA
Agricultural Adjustment Act <美>农业调整法
</>
AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>
AAA
<英> 汽车协会  Automobile Association of Great Britain  
</>
--------------------------------
AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>

请教如何实现,内容不一致的随便保留一条就好了

该用户从未签到

46

主题

468

回帖

3743

积分

贡士

Rank: 6Rank: 6

积分
3743

灌水大神章小蜜蜂章笑傲江湖章

6
发表于 2015-11-11 14:29:54 | 只看该作者
2011star21cn 发表于 2015-11-11 13:05
非常感谢楼上的两位,问题解决了,不过我又发现新问题,还得请二位帮助

有些重复词条的内容并不是完全一 ...



查找用的正则表达式:

(^.+\n)(.+\n</>\n)(\1.+\n</>\n)+

第一个圆括号匹配相同的词条(注意打开区分大小写)
第二个圆括号匹配 Body 和 </>
第三个圆括号匹配和前面词条重复的内容,1 次以上任意重复

替换所用的正则表达式:

\1\2

替换部分默认使用第一次遇到的内容:
\1 即是第一个圆括号所匹配到的内容
\2 即是第二个圆括号所匹配到的内容


经测试,并非所有工具都支持这个正则表达式,RegexBuddy 里面支持这个正则表达式的引擎为:

AceText 2 & 3
C++ Builder XE7 (TRegEx)
Delphi XE7 (TRegEx)
EditPad 6 & 7
Ruby 2.0 - 2.1
TCL 8.6
wxwidgets

不过 EmEditor 支持,这就可以满足你的需求了:






测试数据一:

AA
Agricultural Adjustment Act <美>农业调整法
</>
AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>
AAA
<英> 汽车协会  Automobile Association of Great Britain
</>



结果:

AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>



测试数据二:

AA
Agricultural Adjustment Act <美>农业调整法
</>
AA
Agricultural Adjustment Act <美>农业调整法
</>
AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>
AAA
<英> 汽车协会  Automobile Association of Great Britain
</>
AAA
<英> 汽车协会  Automobile Association of Great Britain
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>



结果

AA
Agricultural Adjustment Act <美>农业调整法
</>
aa
渣熔岩;表面不平整的熔岩
</>
AAA
Automobile Association of Great Britain<英>汽车协会
</>

该用户从未签到

14

主题

131

回帖

1459

积分

解元

Rank: 5Rank: 5

积分
1459
7
 楼主| 发表于 2015-11-11 16:22:37 | 只看该作者
非常感谢,问题全部解决