掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1646|回复: 15

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

[复制链接]

该用户从未签到

发表于 2013-4-10 09:34:38 | 显示全部楼层 |阅读模式
21世纪电脑英汉汉英双向辞典中,每个词条下的正文中,都是用~来代替本词条。6 ^" T: w  i  `7 q2 L3 j7 J
如果想将这里面所有的~替换回该词条,在ultraedit中如何应用正则表达式啊?谢谢!: k; k1 k) e1 @. {3 ^! z1 ^5 |
例如:
- R' E+ Z6 a# Y0 q# V; h$ o</>* m. u9 @' t1 e
book
4 V$ b( L6 \( ^1 (C)<br>
& K' u- K9 Q0 N) Xa. 书,书籍; 著作<br>3 s7 V+ r9 ^4 {$ t
read [write] a ~<br>$ ?+ K; j3 s( F: x( o+ g
读 [著] 书<br>
3 d+ ^  m: J! p5 o→ closed book,open book.<br>/ E+ t: s$ ]8 V- Q$ I7 C# r
b. 知识 [教训] 的泉源, (…之) 书<br>
/ X; ^% O+ ?) q7 p! `; ]the ~ of Nature <br>+ L$ g: F* J8 b- U! E# c
自然之书<br>
, @  f( u8 b; ^) o9 d</>
; \& w; V& a* e" e$ `3 ~; A" q/ i% Xbag
8 Y7 w$ E6 ?* f2 C1 (C)<br>
5 p0 M$ P. u/ _: g. ]a. 袋<br>4 T4 C# x0 y/ N/ P
a paper ~ <br>
& y) @2 ]' s3 C. M& f/ X纸袋<br>
. o! w+ s/ p  V% ]3 q' f: V0 [5 n, j& r→ carry bag,doggie bag,tote bag.<br>
; e8 A& N# j. Z( g3 z! A! ~8 Sb. 猎物袋<br>/ ?, A1 {/ ~* K8 K) c
2 (C)<br>
7 [8 d( `* V9 M/ T  I+ c# ka. 提袋; 旅行袋,提包<br>8 n1 e0 J# R( h: T# k
a traveling ~ <br>
& t6 V% [4 U5 U, a旅行袋<br>) e+ q* y. y+ H, W
</>% m( `# M+ l% T* W, U5 n4 E

" }# O- C+ m, DP.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?3 o2 X2 Z9 n8 X* [/ z
例如:
- h6 F1 z( v- w6 E6 B$ Ra paper ~ <br>5 R4 |2 Y- `0 P" B$ E
纸袋<br>- w1 X# w+ T, z2 ]
改为
/ \0 L' b/ k% |# _! M- Ua 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 编辑
6 w0 W( R7 R! ^8 U' ~5 l5 ~: ~: d+ y. c
可以提供一个方法,在emeditor中测试可以:
1 ^! N5 l/ l( ~# G" f4 f; D* \①所有\n替换成""(无);
9 @* A" a/ J9 s9 l" s+ _& u②</>替换成\n<\>\n;* b4 {& H! J8 n7 E
③^(.*?)( \(.*?)~(.*)$替换成\1\2\1\3,可以多替换几次;, W. Q3 W9 O. M, S. C
③<br>替换成<br>\n.

该用户从未签到

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

该用户从未签到

发表于 2013-4-11 20:51:53 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 0 k5 S: w! p& d2 l2 s

+ X, n" G# k& ?  b6 c  v4 M# e文本处理,当然awk!
, z9 G8 g& \( l# C+ s" v3 Qwindows请安装cygwin或msys。确保可以使用gawk。
$ h4 h0 ~+ j, q+ S+ g" mlinux下面可以直接把代码粘贴到终端执行。$ I6 P) ?2 W; J$ c' j
-----
# h7 Z1 f( r$ u# N% \我把你提供的内容保存到了文件o,使用awk完成了所述功能。
  1. gawk 'BEGIN{% @  J- K1 @: y1 J; e+ a7 `
  2. # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。
    $ f& d+ f8 W; ^
  3. RS="\r\n</>\r\n"
    % d( L. R6 ^( q2 d6 X! ~! ~! T
  4. # 字段分割符。把字段理解为一个句子。此时正好也是换行符。
      g1 t" V( C, a  Z9 k& S- C
  5. FS="\r\n"* I1 Y6 _4 s9 R+ j/ U
  6. }{
    1 b6 e9 \  J3 q, \5 Y% C9 l
  7. # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。* t6 o/ P' D- r7 E
  8. gsub("~",$1)' D' c6 L* |" e2 S9 d! |
  9. # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的行。
    2 s8 ~7 p0 `8 N8 V1 z7 w: ?' a1 g
  10. # ([^\r\n]+)就是后面跟着的一行了,不限中英文。
    3 \; S# e% W2 X9 W$ Q
  11. # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。- p, s( n* [) g% E4 O
  12. $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    ; V, J+ y% w. Q, P
  13. # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。; m, t3 T: V! W  c2 e  Q$ J
  14. # printf("%s%s",$0,RS) > "new.txt"' P0 D6 J/ w4 @) G6 d( G
  15. printf("%s%s",$0,RS). g- ]) F1 o+ X& e. ]" |
  16. }' o
复制代码

该用户从未签到

发表于 2013-4-11 20:56:44 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑
) Q+ h( u8 G2 U; [4 Y& x4 l/ d1 l/ k' Z
效果
  1. froms@froms-HP-g4:/dev/shm$ cat o  # 你的原始文本& o+ H9 b, P1 y
  2. ( n" E9 ^" r# {8 G
  3. </>9 S: L3 z4 `! M4 D
  4. book! p2 u! C& B+ ^1 E1 L) q: _5 }4 b
  5. 1 (C)<br>
    2 A6 g9 P' g& x; A  N% `" F
  6. a. 书,书籍; 著作<br>7 K3 V& t9 F, _$ J; u5 d/ z7 L
  7. read [write] a ~<br>/ a* z' `0 o% y- n% z1 }: }2 J
  8. 读 [著] 书<br>9 O$ i0 w4 y0 _: A) e) y
  9. → closed book,open book.<br>
    - v# @9 Y. s: [4 a9 Y
  10. b. 知识 [教训] 的泉源, (…之) 书<br>
    $ g0 \7 x4 |2 W! ^9 |
  11. the ~ of Nature <br>6 l: @8 b. [$ K, h! _: t6 G& `6 J. t
  12. 自然之书<br>5 o. ]" w- T$ R, Q6 r6 _% W7 p' C
  13. </>3 b& j  ]0 G. r2 y6 }; k
  14. bag7 b( w  W# ~4 W* c1 \0 Z3 S6 O) B
  15. 1 (C)<br>
    ! ?. H. O' J! \: ^
  16. a. 袋<br>
    " q) A2 b1 @! O
  17. a paper ~ <br>
    1 V( G) ^4 W8 V
  18. 纸袋<br>9 O: s  U. n6 g4 H) `
  19. → carry bag,doggie bag,tote bag.<br>. x/ E8 E1 I# {, Z5 ?& j
  20. b. 猎物袋<br>% S2 ~; }- B* |) X/ N
  21. 2 (C)<br>
    ( [* A! {% \( i: A  ?/ H9 Z& G
  22. a. 提袋; 旅行袋,提包<br># o. ]: v% N5 c
  23. a traveling ~ <br>
    / X# {# ?4 M" T
  24. 旅行袋<br>
    4 Q* x- g# z/ G( C6 f
  25. </>
    " s9 @6 C$ o' O3 y
  26. froms@froms-HP-g4:/dev/shm$ gawk 'BEGIN{( K/ s" W5 B5 @/ p; y
  27. > # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。# _' i! [2 @/ t4 ?* m9 B9 _
  28. > RS="\r\n</>\r\n"
    5 {  F9 w% Z' I- c$ h$ Q# Q
  29. > # 字段分割符。把字段理解为一个句子。此时正好也是换行符。
    3 a7 `, d) ]6 L
  30. > FS="\r\n": r! c, s4 D5 T/ A7 v9 D
  31. > }{
    " E( ^6 D  L# Y: L$ h$ D: d: ]
  32. > # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。
    # E3 u5 o! y" J% E! [- b: j
  33. > gsub("~",$1)
    6 r# e$ B4 V# x1 s% V" o( r
  34. > # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的 行。0 v, ]2 U1 \. V8 }; {% x$ B3 u
  35. > # ([^\r\n]+)就是后面跟着的一行了,不限中英文。/ s. D8 a5 ?/ q- |/ S
  36. > # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。: I# m, h+ W/ L) u7 A9 G  ?
  37. > $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")9 q* E# k& J  A2 {4 k0 b% Z
  38. > # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。
    0 n: I# s, @8 v( g4 D
  39. > # printf("%s%s",$0,RS) > "new.txt"
    % o+ O* ?' [( ^- @) H
  40. > printf("%s%s",$0,RS)3 @4 i  h' i/ L' b$ P! ?
  41. > }' o    # 粘贴代码。回车,结果如下。" B  a, B* n# A
  42. 3 ?# e, @1 i+ v2 U2 L7 l3 t
  43. </>  g. W& h/ \/ B: U4 C" L1 F
  44. book- r/ C: I$ C7 ?! x1 Y
  45. 1 (C)<br>
    . c1 S" |- R0 L$ X% U' z* L
  46. a. 书,书籍; 著作<br>
    ! k% Q6 D9 q' A; ~0 Q; a
  47. read [write] a book 读 [著] 书<br>( Y* |2 N4 H* C2 }% A
  48. → closed book,open book.<br>' Y* j& Y6 L) B; l: h9 M
  49. b. 知识 [教训] 的泉源, (…之) 书<br>
    / A" M2 n) f9 N3 _: D/ s0 V$ ~7 O
  50. the book of Nature  自然之书<br>
    : @) a2 o0 q$ u$ Q9 T4 v
  51. </>* X+ Z& r$ i: |$ ?( ]
  52. bag: C4 v! V+ x4 A
  53. 1 (C)<br>; x, t" `- L. m7 V& _8 d7 V
  54. a. 袋<br>/ M$ s" y6 s8 W6 k. J, T0 {$ R
  55. a paper bag  纸袋<br>
    - a% ]- Z3 N: m
  56. → carry bag,doggie bag,tote bag.<br>7 n/ d$ _# ~0 B; {/ e6 s
  57. b. 猎物袋<br># x: \# @' X& p) ]: U8 H
  58. 2 (C)<br>5 t- k, {& q' ^, F
  59. a. 提袋; 旅行袋,提包<br>
    / L8 x) J+ u; H2 e* X9 j
  60. a traveling bag  旅行袋<br>( a& G! ~3 E2 u( v  ?
  61. </>: ~8 J4 t+ @+ q( c" r- x" A2 n; S
复制代码

该用户从未签到

发表于 2013-4-12 20:37:14 | 显示全部楼层
7# 惟吾无为 5 X& F, t$ s7 K! q: X: j9 i
. h+ _, [) g+ G3 A* o
/ D" Y2 g& i8 m/ U9 }
看起来很复杂啊,所以曲高和寡,呵

该用户从未签到

 楼主| 发表于 2013-4-13 09:43:46 | 显示全部楼层
4# zhouxl2000 4 O- @& C. D; r8 x$ _4 \$ `
试了好多次,还是不行,可能是我操作有误。
% d% v- a& n3 m( |6 A: B3 x! Q麻烦能不能截屏图片显示一下操作过程?
" D2 _* i/ W% F9 g. ~8 X4 r谢谢!

该用户从未签到

 楼主| 发表于 2013-4-13 09:46:05 | 显示全部楼层
7# 惟吾无为
, }- u" x2 C4 |谢谢援手相助。

该用户从未签到

发表于 2013-4-13 11:37:51 | 显示全部楼层
7# 惟吾无为 0 V+ `8 U2 T( ]* [) U& D/ u& I' l; C

) F; J$ j: e5 I# U3 N7 k% K0 H; ?  p6 w8 D
看起来很复杂啊,所以曲高和寡,呵
7 N% B2 R4 ~* O+ Fsxingbai 发表于 2013-4-12 20:37
$ h7 [/ A; R& [- ^+ V7 [7 m

( F2 u0 i! F4 p! T5 B) Ased才叫真的复杂。, u! [, ~2 G* A) |& j" d

$ @# W* J& E. E( G8 n! M上面的代码我加了不少注释,去掉#号开头的行。没多少代码。

该用户从未签到

发表于 2013-4-13 11:40:41 | 显示全部楼层
10# tchon * D# F7 L, g( ~1 |! X  I  b

9 [7 j- y2 N+ z9 l, L2 c" a7 a- ^; j7 U
代码改过了。不然行首为大写时没法合并。$ N+ M: v5 L' o: Z
之前疏忽,只在注释中修改了,忘改代码了。

该用户从未签到

发表于 2013-4-15 16:21:11 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:33 编辑
; ^- y5 ^4 `0 H4 Y
4# zhouxl2000 7 k2 E1 J6 M0 {/ h  |: V: I
试了好多次,还是不行,可能是我操作有误。3 L. ?7 e' g9 f5 s& Z7 H2 e
麻烦能不能截屏图片显示一下操作过程?9 t( E* P/ f- l- i
谢谢!
- R: {5 S. }5 M3 H$ utchon 发表于 2013-4-13 09:43

* d. ~% }2 F) L- B+ }4 P9 V3 g' U, A8 P
sorry,前面的替代有点问题,将后面的1也包括到单词中。0 w/ Q9 S3 e" s8 i+ y1 l

6 ^/ D- M2 E' x2 R% [$ R2 ~emeditor可以录制宏,将宏代码保存为test.jsee;
2 j. \4 m) N3 s+ S. m执行时: 宏--选择test.jsee--运行/ S% W6 Z' J( v% n  D7 _+ f& b
宏代码:
  1. document.selection.Replace("\\n","", eeReplaceAll | eeFindReplaceRegExp);3 g# |3 d" V9 G5 c- [2 O
  2. document.selection.Replace("</>","\\n</>\\n", eeReplaceAll | eeFindReplaceRegExp);
    * ?1 T' B  w4 Y' G  [' c. c" Y7 r6 D
  3. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    # U2 q, M5 y  c1 p7 t- Y+ g
  4. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);+ g9 E4 x) `% {
  5. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);! }2 W* N* P1 u3 W
  6. document.selection.Replace("^([^\\d]+)(\\d.*)$","\\1\\n\\2",eeReplaceAll | eeFindReplaceRegExp);0 E( Q) g7 U* C: `' l
  7. document.selection.Replace("<br>","<br>\\n",eeReplaceAll | eeFindReplaceRegExp);
    / J& D7 B# I' P

  8. , t- l/ _3 |" [+ n
复制代码
执行宏后:
  1. ) ~* I( T1 h2 |$ o; {7 [" X8 T
  2. </>
    9 d& n, M9 N( p% \$ [+ {
  3. book
    9 y- F' L: }) o9 v, u" x
  4. 1 (C)<br>' f9 o# M" w3 w
  5. a. 书,书籍; 著作<br>
    $ y% E, ?) k/ y' A
  6. read [write] a book<br>  p1 N' }  k4 E5 d5 _- ?5 Q
  7. 读 [著] 书<br>: F8 R; m: s0 B& x: J" ~
  8. → closed book,open book.<br>7 ~7 n/ u5 P7 X+ I; G1 _
  9. b. 知识 [教训] 的泉源, (…之) 书<br>
    6 }% i6 q" N% n/ V6 Z
  10. the book of Nature <br>" ^  e( G  F) w: W
  11. 自然之书<br>
    1 M  l+ n1 `, W  n5 D2 l/ C
  12. 5 U1 G* O. T3 Z/ W/ o# g6 T
  13. </>
    5 i2 q3 r7 t/ A; M1 O
  14. bag1 ?! @6 D2 N' [+ `5 I* o
  15. 1 (C)<br>' x; q- N  T( E1 G  N& k7 I+ J
  16. a. 袋<br>
    $ B. U% `! Z, Q. @! ]
  17. a paper bag <br>1 j; g7 W6 T7 z& [" ]  L+ V$ ~
  18. 纸袋<br>* P# d9 W0 Z9 b: c) n( L3 {. E
  19. → carry bag,doggie bag,tote bag.<br>' c9 I* w# s' A( P% j6 G  v
  20. b. 猎物袋<br>
    ! ~' }& O2 Y1 x5 a/ {' [, Y2 M. e$ E
  21. 2 (C)<br>
    . L, @1 z+ ~+ h) r
  22. a. 提袋; 旅行袋,提包<br>
    * x5 V% A) x( i' H" _% ^
  23. a traveling bag <br>
    % \" L5 B4 W! j0 C+ n
  24. 旅行袋<br>' ]* R  u5 X, \$ z5 k5 a: U6 m

  25. . R+ C$ e# I, c% G" L# A( }
  26. </>) s/ G3 w" S6 ~( r' Y
  27. P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?例如:a paper ~ <br>
    3 [9 A+ V; g* ~( Q  d" Q$ D2 [
  28. 纸袋<br>% G( b6 t/ F3 }( _/ x3 V/ |2 w) a4 ?9 c
  29. 改为a paper bag 纸袋<br>
    - B: H7 w; J; O. T5 K/ f
复制代码

该用户从未签到

 楼主| 发表于 2013-4-17 23:37:38 | 显示全部楼层
12# 惟吾无为 9 k% \8 d8 Z! o
谢谢!

该用户从未签到

 楼主| 发表于 2013-4-17 23:38:58 | 显示全部楼层
13# zhouxl2000
0 m7 Q( w/ K3 @" i/ \好的,谢谢!: M. d  L3 ?! e; |. u
现在在外面的电脑没有装上emeditor。等过段时间回家再试一下。
. E) W& Y4 M' C" h) ]再次谢谢!

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-4-19 10:34 , Processed in 0.030330 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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