掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1162|回复: 20

[求助] 问一个TXT文件的转换问题

[复制链接]

该用户从未签到

发表于 2009-2-13 22:05:03 | 显示全部楼层 |阅读模式
是这样的,我从stardict上下载了一个字典,转为TXT后,发现里面凡是需要跳转的地方,语法格式都是<kref>abc</kref>;我的目标是把这样的一串字符替换为<A href="entry://abc">abc </A>,请问应如何替换实现?

该用户从未签到

发表于 2009-2-13 22:40:34 | 显示全部楼层
我还真是理解过于简单了。居然没看清有俩“abc”,不好意思啦!/ j$ e) q" q  A1 v
-------------------------------------------------------------------------------------------------5 E) K! L$ [  L# i6 L* G8 L
如果词典文件比较小,把内容粘贴到word文档里处理;如果词典比较大(比如20M以上),用UltraEdit32直接打开TXT处理!: F" w3 H1 I: `! \0 S& t
不知道我理解得是不是过于简单了些?
9 }$ l$ i9 {3 s+ F* E把词条(abc)前面和后面的各种字符分两次替换不就行了吗?(如附图所示)
" i3 x  _0 a; R7 b0 t1 T, q% D3 N4 _6 h+ f4 v* W6 Y6 {
[ 本帖最后由 philostone 于 2009-2-14 20:32 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

该用户从未签到

发表于 2009-2-13 22:58:12 | 显示全部楼层
用ultraedit吧!這個軟件很有用的!或者你不介意的話!可以上傳,看看有沒有辦法幫你轉成mdict用的格式!

该用户从未签到

发表于 2009-2-14 09:42:30 | 显示全部楼层
用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
& B4 N! V$ d# b, Z% _" }' xFind What 里填:  <kref>(.*)</kref>
9 Q1 L) t- d5 [4 y- N5 M. O6 @Replace with 填: <a href="entry://$1">$1</a>
5 k" |# e  V( T+ t勾选那个Regular Expression) j6 i3 i0 V; |! p. ~3 t2 E
点击Advance, 选择 Regular Expression Engine 类型为 Perl, C. \4 r: d0 o6 e+ b& i' r
然后Replace all.

该用户从未签到

发表于 2009-2-14 12:04:29 | 显示全部楼层
原帖由 rayman 于 2009-2-14 09:42 发表
& p6 u' E/ i" P( l% s用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
& H3 |1 L0 Q" nFind What 里填:  (.*)
) E1 |$ u- v) o3 {( bReplace with 填: $12 i- i; u; T  ^  K$ [& \
勾选那个Regular Expression
* `, n9 K1 Q5 B点击Advance, 选择 Regular Expression Engin ...
0 T4 W- |4 J" X' X+ `' r; Z
! Q! X0 m, n5 W; Q

  H. ?' m7 n& \0 _又学一招了,谢谢。
6 F: R6 b7 c/ O懂编程知识就是高效啊!

该用户从未签到

 楼主| 发表于 2009-2-14 13:42:37 | 显示全部楼层
感谢楼上各位的解答。' ?+ y7 m+ k) |$ Q) l% w
0 H" B8 \/ k8 K( s- b
2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。" X/ B5 E: p. k% d% V0 T9 Q
, p: J% i0 }- U% ]' v* X
rayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内容是Voyez <kref>AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU</kref>. 1 D' H# G4 J/ _$ I- G" N% W
" j; m, o% j$ b2 u+ R) u! m
按照rayman的办法,替换之后的结果是Voyez <a href="entry://AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU">AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU</a>. 4 N8 |* x7 {  d6 ]# X9 K8 I

0 `% A5 H2 }  @6 X: l$ D! S但事实上,我需要的结果是Voyez <a href="entry://AVENANT">AVENANT</a>. Pour Le participe passé ADVENU, voyez <a href="entry://AVENU">AVENU</a>.

该用户从未签到

发表于 2009-2-14 13:59:10 | 显示全部楼层
原帖由 zcm1019 于 2009-2-14 13:42 发表 , O& y0 E8 k* `3 J9 D. Y, Z) Z
感谢楼上各位的解答。
6 T* \- B0 }- |" \: Z
7 P" R* [2 M5 f9 j2 d1 z2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。
, F! r7 z* x3 T) I/ u: V7 |
: P  }; ?1 {& @9 a5 P6 @rayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内 ...
! D% i( M$ ?3 [6 B' }
% E' Z# ?" v* W8 j4 r( R$ {

( z. O+ I1 W6 v; I4 e; t2 d, g. H因为你同一行里有两个</kref>,有个折衷的方法就是你把它弄成一行只有一个的就可以正常替换了。! m1 V5 R$ c6 M( K# k; U8 \9 X
不折衷的方法还是等R老大回复啊。

该用户从未签到

 楼主| 发表于 2009-2-14 14:32:59 | 显示全部楼层
是啊,我目前只能先把<kref>替换为^p<kref>,然后再按照rayman的步骤做。
; f* {5 Q9 \* g- N
! L  W" n5 i! B: g$ @' ^7 _东西转好了,等会上传。

该用户从未签到

发表于 2009-2-14 15:48:28 | 显示全部楼层
选择 Regular Expression Engine 类型为 Unix就可以了。

该用户从未签到

发表于 2009-2-14 16:28:28 | 显示全部楼层

回复 9楼 rayman 的帖子

貌似还是不行。

该用户从未签到

 楼主| 发表于 2009-2-14 18:42:43 | 显示全部楼层

回复 9楼 rayman 的帖子

改为UNIX确实不行啊。
7 G3 {& V% Y* z* S- d! o2 B* _1 }, d; s* X' n- J
看了一下午的正则表达式教程,终于找到了一个比较好的办法了。
( w2 J4 x, D; F" @) A& M- `7 j( J5 |2 N, W; v
就是在Find What 里填: <kref>(\w*)</kref>
( P: L4 \* t6 q. K# w. Y! q1 G6 O. I/ o# x4 h' R% p1 D. `
其他仍按rayman的方法填。

该用户从未签到

发表于 2009-2-14 18:49:17 | 显示全部楼层

回复 11楼 zcm1019 的帖子

很强啊,我找半天都找不到。# ^/ |8 F( O4 E0 r) ~
谢谢啊,这个替换很有用。+ N( h1 P  f. l; }: @. W
9 [* o3 S* w, V2 O
[ 本帖最后由 tony4d 于 2009-2-14 18:51 编辑 ]

该用户从未签到

 楼主| 发表于 2009-2-14 19:01:40 | 显示全部楼层

回复 12楼 tony4d 的帖子

我找到的关于正则表达式的教程。
1 L3 K4 ~. Q# c
$ l2 g+ V! g9 C( I# d" w2 t5 Dhttp://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm( L$ g: u2 ], s" B0 N# a. Z$ m- [5 B

# u- Q8 E9 K  N1 |: _7 \5 y尽管里面有若干错误,但瑕不掩瑜,毕竟是中文的看起来比较方便。

该用户从未签到

 楼主| 发表于 2009-2-14 20:14:14 | 显示全部楼层
还可以利用懒惰匹配+ Q0 u  _1 n: A
在Find What 里填: <kref>(.*?)</kref>

该用户从未签到

发表于 2009-2-14 20:34:32 | 显示全部楼层

回复 14楼 zcm1019 的帖子

为什么只是多了个“?”就可以了?
! F3 U6 k# W. [9 X+ X4 A9 n. a) u
9 Z8 _! [( R$ C7 s, B: b6 i<kref>(.*?)</kref>与+ O$ e) k9 D. }# y2 U; l9 m  |
<kref>(.*)</kref>) D- u2 P9 j2 h# q( \
有何区别吗?

该用户从未签到

 楼主| 发表于 2009-2-14 22:20:54 | 显示全部楼层
http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
0 v' g6 ?# T* M3 a2 O$ C! ~- v里面的懒惰匹配那一节。

该用户从未签到

发表于 2009-2-14 22:37:59 | 显示全部楼层

回复 16楼 zcm1019 的帖子

Bravo, thanks so much!

该用户从未签到

发表于 2009-2-15 00:03:01 | 显示全部楼层
奇怪,我试过改成unix就可以了哦。我的ultraedit版本是14.20.1.100, 不知道和版本是否有关。

该用户从未签到

发表于 2009-2-15 00:06:28 | 显示全部楼层
我是14.20.1.1008不行哦,奇怪。

该用户从未签到

发表于 2009-2-15 00:06:51 | 显示全部楼层
原帖由 tony4d 于 2009-2-15 00:06 发表
8 f. z  N' P. h我是14.20.1.1008不行哦,奇怪。
; e2 |3 m/ d  ^3 n5 `& d, D/ Z$ C" ]
我是14.20.1.1008不行哦。

该用户从未签到

发表于 2009-2-15 10:05:57 | 显示全部楼层
可能是默认模式问题,用lazy match方式是对的。就是加多一个"?"
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

小黑屋|手机版|Archiver|PDAWIKI |网站地图

GMT+8, 2025-5-15 11:40 , Processed in 0.027718 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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