掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1330|回复: 15

[求助] 请教一个正则表达式

[复制链接]

该用户从未签到

发表于 2013-4-10 09:34:38 | 显示全部楼层 |阅读模式
21世纪电脑英汉汉英双向辞典中,每个词条下的正文中,都是用~来代替本词条。1 ?' O1 }) X1 J& r; R* w# d* K
如果想将这里面所有的~替换回该词条,在ultraedit中如何应用正则表达式啊?谢谢!% q# D) K& C$ |) Z2 m: {
例如:7 K7 {4 [8 x! `4 g' |5 Y
</>! U* Q/ |; ?6 o/ O2 `
book
" i( o: z) p7 B; @1 g3 x1 (C)<br>
- J( q8 X7 j, N. |7 a' Ma. 书,书籍; 著作<br>5 g) H% R8 ?+ y' O2 c
read [write] a ~<br>' H3 h. R7 K$ e9 R0 `/ r' e; X* p
读 [著] 书<br>
$ e4 r6 j0 `# Z+ t+ f→ closed book,open book.<br>; j, l/ Y( Z( v2 A. D3 _# t* @' V
b. 知识 [教训] 的泉源, (…之) 书<br>) J( h) Z* o% [; [* e+ A
the ~ of Nature <br>" r. g2 J! A- N! Z' {; u
自然之书<br>
$ S  H. Y* C( P/ ~</>
1 J  e9 \; e. L4 Bbag
/ u! I0 r, K& T0 ?" O1 (C)<br>
9 D$ R# L& |, A* [7 D1 F; c  Ga. 袋<br>5 J) w" j0 Y0 G3 ^' P% _% K
a paper ~ <br>: c/ d7 Q! p: g& J
纸袋<br>7 h5 G* K1 w1 M5 I: J% b
→ carry bag,doggie bag,tote bag.<br>
2 z4 {( l- R- V( jb. 猎物袋<br>% a, O) f# ?3 X: G' M4 ~( h
2 (C)<br>; {* O; k) @. \# Z5 Q) x  _% I( M
a. 提袋; 旅行袋,提包<br>
4 k) b$ q) i2 ]* i# ka traveling ~ <br>& {& J- F6 z, G  ]4 j  s; d
旅行袋<br>) ]' e! Z8 l- x9 F4 e% b
</>
! F- d! [+ O3 w% x$ @
- \$ p4 G) u: }* sP.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?
( Z; h3 `% _: ~6 \: L# r例如:% u( N, U: D) H. }7 D
a paper ~ <br>  O8 x6 g, |; M7 n
纸袋<br>2 j9 c2 d5 r9 V
改为
; M+ p* B/ ]; ~, R/ b* V# Ba paper bag 纸袋<br>

该用户从未签到

发表于 2013-4-10 09:56:57 | 显示全部楼层
这个有价值,支持一下

该用户从未签到

发表于 2013-4-10 12:26:07 | 显示全部楼层
有点儿麻烦

该用户从未签到

发表于 2013-4-11 10:17:56 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:13 编辑
% r( r3 D( O3 P& P* q% B/ Y- S* t6 `/ ^" c3 {* r& s
可以提供一个方法,在emeditor中测试可以:& [4 u5 I+ }0 z5 x- u% ]
①所有\n替换成""(无);3 `7 w8 T/ y* D( J. y" O
②</>替换成\n<\>\n;- m& ~! s7 Z# E! e* Z0 z  \
③^(.*?)( \(.*?)~(.*)$替换成\1\2\1\3,可以多替换几次;
) s: c! V4 }8 m( @③<br>替换成<br>\n.

该用户从未签到

 楼主| 发表于 2013-4-11 16:06:23 | 显示全部楼层
好的,我找emeditor试一下,先谢谢了!

该用户从未签到

发表于 2013-4-11 20:51:53 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 - z  U+ [; ?9 d  t

; a1 P9 p7 b& t7 o: l文本处理,当然awk!
7 R. `3 _! e& Q/ |8 _8 [windows请安装cygwin或msys。确保可以使用gawk。
3 {/ R! z$ `/ J8 Z3 s7 D! Mlinux下面可以直接把代码粘贴到终端执行。- G$ {8 S9 k) F+ P2 B
-----2 H4 ]) G1 X2 q0 f$ f" A
我把你提供的内容保存到了文件o,使用awk完成了所述功能。
  1. gawk 'BEGIN{
    & k7 S& o# S2 ]: A
  2. # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。7 P" A7 b6 O' s1 d) q
  3. RS="\r\n</>\r\n"
    2 n4 O3 S0 s5 D0 y0 u) D4 c" U
  4. # 字段分割符。把字段理解为一个句子。此时正好也是换行符。
    : ~5 V0 \  Z4 n3 I
  5. FS="\r\n"# T* v* o6 w6 z7 \% q0 ~- z
  6. }{; {% S0 \2 Z" D; `
  7. # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。0 k' _: Q* k# `, P/ H8 X6 ]  v" f/ O
  8. gsub("~",$1)
    & z# @( P/ h, `* }
  9. # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的行。" C. n" B$ r0 t* G" c, X
  10. # ([^\r\n]+)就是后面跟着的一行了,不限中英文。4 t( d; {- p. `& Q
  11. # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。
    3 k& q6 B3 t+ J, a
  12. $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    : z: n& a( _3 l. [9 M( Z# N8 ]6 @
  13. # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。
    2 R$ D. H" }, x5 _# d) A$ T& o- O
  14. # printf("%s%s",$0,RS) > "new.txt"
    3 D* @% y9 L2 O0 K! _- k
  15. printf("%s%s",$0,RS)8 c" f+ C) S1 b' I+ s, K0 w
  16. }' o
复制代码

该用户从未签到

发表于 2013-4-11 20:56:44 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 ( ]) D0 B1 y4 a1 ^! X! z0 `, @% n

* Z: F2 Q5 D  H' h效果
  1. froms@froms-HP-g4:/dev/shm$ cat o  # 你的原始文本( ~0 `1 m. S+ [+ E, v6 H
  2. 4 f5 J1 q* f( C; m3 {
  3. </>
    3 R2 g0 h" d1 @
  4. book
    $ A, c3 i: [2 G# U( k  v2 N
  5. 1 (C)<br>
    + ~% I+ F, e; h" h; M4 G, E" ^
  6. a. 书,书籍; 著作<br>
    " i: c& ]; {' ~( T' v) U0 L/ n
  7. read [write] a ~<br>: l, k" W5 R, j6 f6 R
  8. 读 [著] 书<br>
    1 S  [* y0 E9 {0 ~3 F% m, x+ J
  9. → closed book,open book.<br>
    # a) \2 G, B) v0 q
  10. b. 知识 [教训] 的泉源, (…之) 书<br>2 h$ F, u7 P' I" @8 Z; ~/ |9 v/ r
  11. the ~ of Nature <br>" p! i, ^# @" Q' `
  12. 自然之书<br>, ~! k2 y% W4 `6 Z
  13. </>2 V% ]& U+ ]; s0 z" }2 @! X
  14. bag: \# p" L6 W0 t# K" f
  15. 1 (C)<br>
    7 d7 u9 w2 b6 r5 I1 A7 L  h9 b9 Q
  16. a. 袋<br>! E  |5 h6 \1 E
  17. a paper ~ <br>
    : N# y* \% T- ^& c; z
  18. 纸袋<br>) x; V# E1 T, A. k. U2 {
  19. → carry bag,doggie bag,tote bag.<br>, y2 e1 g+ L$ ~9 k6 v
  20. b. 猎物袋<br>
    , u! x3 v9 Q6 W- e, z! |4 \$ m4 c# P
  21. 2 (C)<br>  q# k* [/ T; g8 K$ n/ H; k
  22. a. 提袋; 旅行袋,提包<br>
    " g- o# P) r- J, ^" }$ m
  23. a traveling ~ <br>
    ! b+ v) \9 h& B& P
  24. 旅行袋<br>
    ! Z$ x5 ]0 K+ O
  25. </>" Y0 ^6 _, T" G9 ~: r
  26. froms@froms-HP-g4:/dev/shm$ gawk 'BEGIN{
    4 H7 K& a3 U  E- [( Y
  27. > # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。
    - b9 c2 b9 G9 g0 s  _% j% U
  28. > RS="\r\n</>\r\n"; U( F5 s) p* @
  29. > # 字段分割符。把字段理解为一个句子。此时正好也是换行符。% v9 o9 f+ n! L$ T8 ^
  30. > FS="\r\n"
    ' s: C- U5 k% K# p! a% h* `
  31. > }{" ]. S; ~: ?9 L/ v$ E9 B8 L
  32. > # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。
    " u: B, R$ z2 c1 N8 g2 @
  33. > gsub("~",$1)0 _/ V* v. }& c8 h7 a, U
  34. > # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的 行。
    8 j, @1 F- y7 V2 H
  35. > # ([^\r\n]+)就是后面跟着的一行了,不限中英文。. y/ [, ~! j) x8 d8 H) l1 P
  36. > # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。
    7 K  ~, q7 e! D8 ^! x7 k, q* w
  37. > $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    9 x1 T  v+ @" ], J
  38. > # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。& I1 J$ U+ R0 {; w% k) Q! n
  39. > # printf("%s%s",$0,RS) > "new.txt"1 J) E6 v0 U9 ?, s. j, A( j
  40. > printf("%s%s",$0,RS)* V6 a: j. _$ B9 n5 S  \  ]! i
  41. > }' o    # 粘贴代码。回车,结果如下。1 H# f( ^5 f) t' \6 ]

  42. 0 A9 f2 H3 }8 k6 T3 H) s2 m% y& Q8 r- a5 z
  43. </>5 W" |) u) d' P4 G7 q; U
  44. book6 ^0 I- p: {  A* l2 H4 u
  45. 1 (C)<br>. k: ?* }0 h  w1 G2 J; ], t% [
  46. a. 书,书籍; 著作<br>% |. {- h' M) D* |# u& N# H) p
  47. read [write] a book 读 [著] 书<br>8 b) i) u% _. V1 b- d, J
  48. → closed book,open book.<br>8 b/ J# g0 r! P0 O6 }8 r
  49. b. 知识 [教训] 的泉源, (…之) 书<br>
    5 N. Q0 z7 {) H' R! a% Y
  50. the book of Nature  自然之书<br>
    5 D  Y9 u0 _' {; `- R  H* u* o
  51. </>
    1 w# o' z' i5 P5 U' g
  52. bag" o6 g: X  K/ a6 L4 ]
  53. 1 (C)<br>
    6 [1 B1 w! A& M7 n, w
  54. a. 袋<br>8 d; q, {2 j, K, _/ f% A
  55. a paper bag  纸袋<br>* q6 w4 j0 a( g8 @. t$ ?$ ^
  56. → carry bag,doggie bag,tote bag.<br>
    4 ], e3 _7 Z" t1 n2 s
  57. b. 猎物袋<br>
    ' c) }/ E2 V, G1 ^% _
  58. 2 (C)<br>" I0 ]0 d# R- Z; D& i+ y
  59. a. 提袋; 旅行袋,提包<br>; k/ A$ ]: i/ [0 d
  60. a traveling bag  旅行袋<br>
    $ f3 b/ i- L" K( m+ r
  61. </>2 J7 n& l) r* k8 A7 o
复制代码

该用户从未签到

发表于 2013-4-12 20:37:14 | 显示全部楼层
7# 惟吾无为
5 r1 Q; H; z( c% G  T8 N: B  @6 V/ u
! ^' E' l3 z3 X" `1 A/ v9 [: ~1 {5 l" M
看起来很复杂啊,所以曲高和寡,呵

该用户从未签到

 楼主| 发表于 2013-4-13 09:43:46 | 显示全部楼层
4# zhouxl2000 4 j6 ?( r& x4 X0 Y  w/ m: n
试了好多次,还是不行,可能是我操作有误。
( ^3 A( j- r; u' w麻烦能不能截屏图片显示一下操作过程?
9 `# ?0 l! t; R! T3 n, i谢谢!

该用户从未签到

 楼主| 发表于 2013-4-13 09:46:05 | 显示全部楼层
7# 惟吾无为 % D9 q  [+ s3 b( {0 Q7 b; D% y
谢谢援手相助。

该用户从未签到

发表于 2013-4-13 11:37:51 | 显示全部楼层
7# 惟吾无为 ' v1 k2 Y6 E0 p" h* T

/ L! l' ]& ~' {1 c0 Z7 ^; \  c$ w) i8 Y' V! o% [4 }
看起来很复杂啊,所以曲高和寡,呵
  n9 L4 s4 k% G: nsxingbai 发表于 2013-4-12 20:37
$ N8 ~6 S2 `1 J) q: C6 y

! R$ T8 z9 h9 ^+ S+ qsed才叫真的复杂。7 a# K9 ^+ x8 R* b; u
8 R: n& F9 W. I3 o& O) _
上面的代码我加了不少注释,去掉#号开头的行。没多少代码。

该用户从未签到

发表于 2013-4-13 11:40:41 | 显示全部楼层
10# tchon   s% V! a  y  U0 j8 ]
7 E, I8 n% v! `# I! U; k/ z

1 _+ b' ^+ e4 s3 V. n代码改过了。不然行首为大写时没法合并。4 b& V, P/ W7 W2 X+ L2 P+ s
之前疏忽,只在注释中修改了,忘改代码了。

该用户从未签到

发表于 2013-4-15 16:21:11 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:33 编辑
+ @2 ?. R  d1 O- |3 Q& o, I$ K
4# zhouxl2000
" ]' W' i1 z, |( o% |% I试了好多次,还是不行,可能是我操作有误。8 W- _$ n! |9 @9 z
麻烦能不能截屏图片显示一下操作过程?
. Y1 k; e* ^) ?% C谢谢!$ k, t: P2 H- m9 H% W$ p4 ?5 M
tchon 发表于 2013-4-13 09:43
$ E( N) Q0 u/ F6 l# k4 u5 ]

; F, x2 F4 c3 h1 Wsorry,前面的替代有点问题,将后面的1也包括到单词中。
' i4 g; n  u4 H. h) h6 s2 |) t& A$ p  }5 \5 S
emeditor可以录制宏,将宏代码保存为test.jsee;
( g9 O8 r- }) ^+ L8 O" O$ v1 n执行时: 宏--选择test.jsee--运行/ r7 w2 [% r" E7 b; ?' l% P
宏代码:
  1. document.selection.Replace("\\n","", eeReplaceAll | eeFindReplaceRegExp);
    ; W+ f6 g) t, F% ]3 Y4 q
  2. document.selection.Replace("</>","\\n</>\\n", eeReplaceAll | eeFindReplaceRegExp);
    7 Z4 \( e: T' b% P" C7 H
  3. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    9 g5 m; t; I* y7 ^
  4. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);) Z% o/ f" c: B* o7 o0 V6 D: ~
  5. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);" e6 N1 p8 z8 p' X/ x$ W
  6. document.selection.Replace("^([^\\d]+)(\\d.*)$","\\1\\n\\2",eeReplaceAll | eeFindReplaceRegExp);
    6 G; M6 e: h* H7 |, v! |
  7. document.selection.Replace("<br>","<br>\\n",eeReplaceAll | eeFindReplaceRegExp);
    8 r( ~  R# m0 e( J4 Z3 {) n
  8. / n' M4 S  Q1 F2 u% D( ?
复制代码
执行宏后:

  1. 6 x, K% C+ h+ g
  2. </>
    4 C9 h' l; |% g! B% m" G& y
  3. book
    5 v  ~2 a( u! W" B4 x7 J
  4. 1 (C)<br>
    8 @' [- N6 Q0 j  v& \. I/ k
  5. a. 书,书籍; 著作<br>- j; [3 m# b! W" R
  6. read [write] a book<br>( l2 i2 a9 V8 i6 b2 e$ N" r4 |
  7. 读 [著] 书<br>
    . O5 _5 u4 \( V/ L6 M- B; H" @- \
  8. → closed book,open book.<br>
    ) }% H2 \6 _6 D
  9. b. 知识 [教训] 的泉源, (…之) 书<br>1 D& e" L. l" b4 |' v
  10. the book of Nature <br>' g/ K, b! W8 }* c( M
  11. 自然之书<br>, }' V$ b; h/ X$ ~7 R, T
  12. $ m0 \7 T/ a4 i
  13. </>5 p, R! g7 I7 i0 v/ x5 g
  14. bag
    1 {6 |9 }- h* l8 [+ Y" v
  15. 1 (C)<br>) ]0 R; W$ s3 z3 {9 K
  16. a. 袋<br>6 i' ?; G( @" B3 A# Q
  17. a paper bag <br>$ }- o# E( z) a" O5 T8 i1 b, B6 g! y
  18. 纸袋<br>0 L. B+ |% a/ ?+ p
  19. → carry bag,doggie bag,tote bag.<br>
    5 z# a$ L+ x- o0 a, X7 z
  20. b. 猎物袋<br># U5 B+ a0 R" a: n
  21. 2 (C)<br>8 i6 e- r4 f! o' v# d
  22. a. 提袋; 旅行袋,提包<br>) i% @' H  G( u1 y
  23. a traveling bag <br>* }2 I* q" _0 V, k
  24. 旅行袋<br>
    6 ^& k( u& p% A: H) H
  25. # F0 f4 @# I4 n" P7 r6 w' u
  26. </>
    5 Z- N9 r1 [  P. A1 \! p) d, }6 H: l4 b
  27. P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?例如:a paper ~ <br>
    % b7 J  P" L* J+ \  y8 I
  28. 纸袋<br>
    9 P: Y; I- j# @, q. I
  29. 改为a paper bag 纸袋<br>) G- l* ~$ j! Y# y. l/ r
复制代码

该用户从未签到

 楼主| 发表于 2013-4-17 23:37:38 | 显示全部楼层
12# 惟吾无为 / [2 u0 k: K3 ~
谢谢!

该用户从未签到

 楼主| 发表于 2013-4-17 23:38:58 | 显示全部楼层
13# zhouxl2000 9 [3 S8 C, J( o9 J2 L
好的,谢谢!% u/ R6 R' ]1 X" f1 o5 C  k
现在在外面的电脑没有装上emeditor。等过段时间回家再试一下。* q( Q7 \* @# I" J9 j4 C. f, ?
再次谢谢!

该用户从未签到

发表于 2014-6-18 08:39:39 | 显示全部楼层
楼主的想法相当好
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-29 18:19 , Processed in 0.053578 second(s), 8 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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