查看: 880|回复: 20
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
跳转到指定楼层
1
发表于 2009-2-13 22:05:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是这样的,我从stardict上下载了一个字典,转为TXT后,发现里面凡是需要跳转的地方,语法格式都是<kref>abc</kref>;我的目标是把这样的一串字符替换为<A href="entry://abc">abc </A>,请问应如何替换实现?

该用户从未签到

375

主题

1098

回帖

7191

积分

会元

Rank: 7Rank: 7Rank: 7

积分
7191

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

2
发表于 2009-2-13 22:40:34 | 只看该作者
我还真是理解过于简单了。居然没看清有俩“abc”,不好意思啦!
-------------------------------------------------------------------------------------------------
如果词典文件比较小,把内容粘贴到word文档里处理;如果词典比较大(比如20M以上),用UltraEdit32直接打开TXT处理!
不知道我理解得是不是过于简单了些?
把词条(abc)前面和后面的各种字符分两次替换不就行了吗?(如附图所示)

[ 本帖最后由 philostone 于 2009-2-14 20:32 编辑 ]

replace01.png (21.79 KB, 下载次数: 0)

replace01.png

replace02.png (21.66 KB, 下载次数: 0)

replace02.png

该用户从未签到

0

主题

1160

回帖

55

积分

童生

Rank: 2

积分
55
3
发表于 2009-2-13 22:58:12 | 只看该作者
用ultraedit吧!這個軟件很有用的!或者你不介意的話!可以上傳,看看有沒有辦法幫你轉成mdict用的格式!

该用户从未签到

45

主题

1420

回帖

1万

积分

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

积分
10971

管理组专用章

4
发表于 2009-2-14 09:42:30 | 只看该作者
用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
Find What 里填:  <kref>(.*)</kref>
Replace with 填: <a href="entry://$1">$1</a>
勾选那个Regular Expression
点击Advance, 选择 Regular Expression Engine 类型为 Perl
然后Replace all.

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
5
发表于 2009-2-14 12:04:29 | 只看该作者
原帖由 rayman 于 2009-2-14 09:42 发表
用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
Find What 里填:  (.*)
Replace with 填: $1
勾选那个Regular Expression
点击Advance, 选择 Regular Expression Engin ...



又学一招了,谢谢。
懂编程知识就是高效啊!

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
6
 楼主| 发表于 2009-2-14 13:42:37 | 只看该作者
感谢楼上各位的解答。

2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。

rayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内容是Voyez <kref>AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU</kref>.

按照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>.

但事实上,我需要的结果是Voyez <a href="entry://AVENANT">AVENANT</a>. Pour Le participe passé ADVENU, voyez <a href="entry://AVENU">AVENU</a>.

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
7
发表于 2009-2-14 13:59:10 | 只看该作者
原帖由 zcm1019 于 2009-2-14 13:42 发表
感谢楼上各位的解答。

2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。

rayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内 ...



因为你同一行里有两个</kref>,有个折衷的方法就是你把它弄成一行只有一个的就可以正常替换了。
不折衷的方法还是等R老大回复啊。

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
8
 楼主| 发表于 2009-2-14 14:32:59 | 只看该作者
是啊,我目前只能先把<kref>替换为^p<kref>,然后再按照rayman的步骤做。

东西转好了,等会上传。

该用户从未签到

45

主题

1420

回帖

1万

积分

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

积分
10971

管理组专用章

9
发表于 2009-2-14 15:48:28 | 只看该作者
选择 Regular Expression Engine 类型为 Unix就可以了。

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
10
发表于 2009-2-14 16:28:28 | 只看该作者

回复 9楼 rayman 的帖子

貌似还是不行。

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
11
 楼主| 发表于 2009-2-14 18:42:43 | 只看该作者

回复 9楼 rayman 的帖子

改为UNIX确实不行啊。

看了一下午的正则表达式教程,终于找到了一个比较好的办法了。

就是在Find What 里填: <kref>(\w*)</kref>

其他仍按rayman的方法填。

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
12
发表于 2009-2-14 18:49:17 | 只看该作者

回复 11楼 zcm1019 的帖子

很强啊,我找半天都找不到。
谢谢啊,这个替换很有用。

[ 本帖最后由 tony4d 于 2009-2-14 18:51 编辑 ]

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
13
 楼主| 发表于 2009-2-14 19:01:40 | 只看该作者

回复 12楼 tony4d 的帖子

我找到的关于正则表达式的教程。

http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

尽管里面有若干错误,但瑕不掩瑜,毕竟是中文的看起来比较方便。

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
14
 楼主| 发表于 2009-2-14 20:14:14 | 只看该作者
还可以利用懒惰匹配
在Find What 里填: <kref>(.*?)</kref>

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
15
发表于 2009-2-14 20:34:32 | 只看该作者

回复 14楼 zcm1019 的帖子

为什么只是多了个“?”就可以了?

<kref>(.*?)</kref>与
<kref>(.*)</kref>
有何区别吗?

该用户从未签到

53

主题

474

回帖

2635

积分

解元

Rank: 5Rank: 5

积分
2635
16
 楼主| 发表于 2009-2-14 22:20:54 | 只看该作者

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
17
发表于 2009-2-14 22:37:59 | 只看该作者

回复 16楼 zcm1019 的帖子

Bravo, thanks so much!

该用户从未签到

45

主题

1420

回帖

1万

积分

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

积分
10971

管理组专用章

18
发表于 2009-2-15 00:03:01 | 只看该作者
奇怪,我试过改成unix就可以了哦。我的ultraedit版本是14.20.1.100, 不知道和版本是否有关。

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
19
发表于 2009-2-15 00:06:28 | 只看该作者
我是14.20.1.1008不行哦,奇怪。

该用户从未签到

57

主题

214

回帖

1307

积分

解元

Rank: 5Rank: 5

积分
1307

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

QQ
20
发表于 2009-2-15 00:06:51 | 只看该作者
原帖由 tony4d 于 2009-2-15 00:06 发表
我是14.20.1.1008不行哦,奇怪。

我是14.20.1.1008不行哦。

该用户从未签到

45

主题

1420

回帖

1万

积分

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

积分
10971

管理组专用章

21
发表于 2009-2-15 10:05:57 | 只看该作者
可能是默认模式问题,用lazy match方式是对的。就是加多一个"?"