掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1345|回复: 15

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

[复制链接]

该用户从未签到

发表于 2013-4-10 09:34:38 | 显示全部楼层 |阅读模式
21世纪电脑英汉汉英双向辞典中,每个词条下的正文中,都是用~来代替本词条。
3 p' h% \! Z+ G3 ^/ d' W: s如果想将这里面所有的~替换回该词条,在ultraedit中如何应用正则表达式啊?谢谢!; [5 l( h# }9 W' I5 s
例如:
, W. k' F7 b& z</>
7 }" L! O( r, h$ {* ubook
- s4 F) w: v# t; w8 q1 (C)<br>
2 [0 r9 L% A8 T' q# w7 \6 a6 Ra. 书,书籍; 著作<br>/ Z; T" l5 u9 I" L, T
read [write] a ~<br>
8 @' H, a( g/ _4 r读 [著] 书<br>
' f  f  ~( f' G# v→ closed book,open book.<br>
" V4 b: D  Q, R/ g, i' n, m9 Wb. 知识 [教训] 的泉源, (…之) 书<br>
+ t- L; q. u1 z, vthe ~ of Nature <br>* J: _0 P$ I* c. F* [' D) j
自然之书<br>2 X' \# l. s: S( G( ^$ {2 A" c
</>' c3 n% A/ G" J
bag2 B% z+ a/ I2 f' ~6 O
1 (C)<br>: ?2 V+ K5 ~+ |5 E
a. 袋<br>
# y* q0 {+ n* Q% ~  ga paper ~ <br>. `) x7 k8 n" m, i5 A: {2 Q6 @
纸袋<br>) E* l# D7 v+ x7 ~; l+ d
→ carry bag,doggie bag,tote bag.<br>
2 z/ z& d2 N! {. Jb. 猎物袋<br>
9 d$ p" S5 Q8 B; O6 f) z  ]! V& l. X2 (C)<br>7 K) t4 g9 u5 {
a. 提袋; 旅行袋,提包<br>
" |# N' l# U- W* W; U& }3 |a traveling ~ <br>
6 T' d7 B9 ]! |/ D( q2 z/ M旅行袋<br>
  z3 f5 M, k0 K) ~$ q4 K</>
4 Q3 w2 m/ K9 r% a# `/ G; F6 G# o# B0 Q' p6 j2 U& x
P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?( |% S; k6 k: h- Q; G% m! Z5 Y
例如:( e9 S/ f. z. M$ ]6 V
a paper ~ <br>- @6 Y5 K' G$ s) O( Y
纸袋<br>& p1 d4 C3 `+ e5 L1 e/ a- z
改为& y9 j: i" v" ?  v. t
a 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  F. V- h: }! e$ C0 N& x3 ~) ^
可以提供一个方法,在emeditor中测试可以:8 g! i/ R) R8 X$ J) K2 y
①所有\n替换成""(无);, u7 X* c/ S# T
②</>替换成\n<\>\n;
  L6 z, e! h: L5 {1 E6 Z( Y③^(.*?)( \(.*?)~(.*)$替换成\1\2\1\3,可以多替换几次;
2 g( F6 ~2 f2 a( Q" s$ S& g③<br>替换成<br>\n.

该用户从未签到

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

该用户从未签到

发表于 2013-4-11 20:51:53 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑
: q9 H; ~0 t7 Z+ z% o2 K% H
9 Q: x( M0 K4 y* K. S文本处理,当然awk!
& c4 b4 p7 y: A. }' X  Ewindows请安装cygwin或msys。确保可以使用gawk。$ [* q& ]0 {& b. O7 F, B
linux下面可以直接把代码粘贴到终端执行。
/ I+ V. \: N7 P, N0 o0 h-----6 J/ a) w4 _9 \# D' T  H- g
我把你提供的内容保存到了文件o,使用awk完成了所述功能。
  1. gawk 'BEGIN{6 Y  Z2 n, u! S8 N% `2 g
  2. # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。5 R3 P* e. O- x1 b( ?' ^0 t- P
  3. RS="\r\n</>\r\n"
    # \: L5 y: Y& s$ `' `7 d9 @- p( U' T
  4. # 字段分割符。把字段理解为一个句子。此时正好也是换行符。7 d. [9 m* J5 W/ o
  5. FS="\r\n"2 o+ ^0 J) e, T) }
  6. }{" u+ O  x' s' a& F2 n1 h
  7. # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。
    * B4 V1 l0 c2 j- J
  8. gsub("~",$1)# z0 E  X4 ?6 b2 [" k2 W
  9. # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的行。
    7 ~1 f* v7 A! G" f' u9 G
  10. # ([^\r\n]+)就是后面跟着的一行了,不限中英文。
    " ?6 K  \, I* V8 f6 I
  11. # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。$ f/ K% Z* S/ s
  12. $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    1 W) P% y1 X+ a) w! N
  13. # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。% [( y" ]0 k' J
  14. # printf("%s%s",$0,RS) > "new.txt"
    $ H) }( P6 i) r  F0 ?, C  e* d. b
  15. printf("%s%s",$0,RS)
    8 D3 z1 F/ {7 \. U8 |
  16. }' o
复制代码

该用户从未签到

发表于 2013-4-11 20:56:44 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 * R+ Y$ E4 }( ^3 c" o4 J# i

/ E# T# D$ E3 ^效果
  1. froms@froms-HP-g4:/dev/shm$ cat o  # 你的原始文本9 }: K  z$ ?8 d. M$ Q$ ^
  2. ) Y" j" C5 H1 _
  3. </>
    . O3 j, q# O, S4 @$ Q& \
  4. book9 p# Z3 |3 [  b+ z7 u2 P, Q* Y3 E
  5. 1 (C)<br>
    9 G+ C9 h  a- r% L! R& y: h7 C& ]
  6. a. 书,书籍; 著作<br>
    * w; f0 b' F$ H4 t. w$ ]. X
  7. read [write] a ~<br>) ^/ k, g6 e% O* x, w
  8. 读 [著] 书<br>
      [: }& I% ]* d, ?, i
  9. → closed book,open book.<br>
    + L$ m& T* T. {! _
  10. b. 知识 [教训] 的泉源, (…之) 书<br># v# z! B' Y& n$ v6 r7 h
  11. the ~ of Nature <br>  x& S3 j6 s2 L3 k
  12. 自然之书<br>
    % _3 S  K  A: K. Z! Q
  13. </>
    # o" Q% d% x' i
  14. bag8 F1 Z8 A* J  f6 b# G- V+ j7 {
  15. 1 (C)<br>
    , \% {1 [2 [7 W7 P
  16. a. 袋<br>
    & d' a# o' I* Z
  17. a paper ~ <br>
    8 ?5 d: |: j2 C& Z
  18. 纸袋<br>1 x1 y6 _! y* l+ @; k. t
  19. → carry bag,doggie bag,tote bag.<br>
    - W- _: V5 e# n  h
  20. b. 猎物袋<br>+ C( p; ~1 g# u* [3 g
  21. 2 (C)<br>
    : ~# z% I1 b; |% v) @
  22. a. 提袋; 旅行袋,提包<br>1 t6 a. d2 V1 k7 Z: b8 v( c
  23. a traveling ~ <br># ?1 m6 R+ w4 b7 t
  24. 旅行袋<br>
    ' L3 v& j/ t, t2 D
  25. </>$ ^9 h( V& p* U1 V4 R) u9 U
  26. froms@froms-HP-g4:/dev/shm$ gawk 'BEGIN{
    % E% G4 Q* D3 ~& a- b% h' ]
  27. > # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。
    * [  a1 c; |" t, A  P3 ?
  28. > RS="\r\n</>\r\n"$ Z' o" \) L" l3 @3 V
  29. > # 字段分割符。把字段理解为一个句子。此时正好也是换行符。$ q& Q! \$ f  m8 h/ X
  30. > FS="\r\n"
    : Q4 y+ N9 b4 {* O2 H  K6 m
  31. > }{- V7 q# }& r/ Z7 p/ H' Q
  32. > # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。! J8 v1 }$ ]) r, Y# c$ i
  33. > gsub("~",$1)0 _( ?* E) X/ j2 q  f. ~% D# }
  34. > # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的 行。+ f3 g1 h1 b3 `) D' [) V1 }
  35. > # ([^\r\n]+)就是后面跟着的一行了,不限中英文。5 s5 c" B6 c% h& K* _
  36. > # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。& N+ K2 ~. D: _5 S5 S* C
  37. > $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")9 K5 p" h- X! h+ m0 d4 Q9 I  x/ M
  38. > # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。! T: t. h2 t' }9 g" J! S
  39. > # printf("%s%s",$0,RS) > "new.txt"& ]6 f7 b# N! m- A6 z
  40. > printf("%s%s",$0,RS)
    / t3 t* t3 Z8 C5 T2 u, ?
  41. > }' o    # 粘贴代码。回车,结果如下。
    % d( I9 ~! r2 u4 H: v4 P5 N! w- m
  42. 8 h2 p  ~: F6 P. m6 o
  43. </>/ u. O3 T" L5 ]  D# \0 W4 P. Q
  44. book' R" x& J$ b; r' X, a4 Z) N% K
  45. 1 (C)<br>5 V$ b% A% I; b6 P5 K. ?/ F2 b
  46. a. 书,书籍; 著作<br>
    1 p7 b1 |/ u! D  Q. F+ W
  47. read [write] a book 读 [著] 书<br>
    & \! g3 J/ l6 U' a( S0 |
  48. → closed book,open book.<br>  w9 M1 W2 M. {/ D
  49. b. 知识 [教训] 的泉源, (…之) 书<br>$ x" y5 Q4 Q7 |: N$ {; Z
  50. the book of Nature  自然之书<br>
    3 G& s( C) W3 T* }4 d" L# n/ V
  51. </>* _4 r9 f3 x0 i# B
  52. bag/ d" i% E9 T. ?2 B
  53. 1 (C)<br>) x* v- N/ O& Y. p8 ]
  54. a. 袋<br>
    5 A( F2 [) `+ s5 D
  55. a paper bag  纸袋<br>$ u1 y0 U2 q. |
  56. → carry bag,doggie bag,tote bag.<br>1 O/ K$ m4 s, f% D* o
  57. b. 猎物袋<br>
    2 W& c' `8 b6 x( ]
  58. 2 (C)<br>
    8 |, @- x0 l2 A9 h, Z# r
  59. a. 提袋; 旅行袋,提包<br>
    ' G4 b' Y& G# x9 l- ?
  60. a traveling bag  旅行袋<br>3 r- s  z* l8 j) ]; ~+ g
  61. </>
    + C" z& c5 ]6 J; O
复制代码

该用户从未签到

发表于 2013-4-12 20:37:14 | 显示全部楼层
7# 惟吾无为
9 s: g& I; t; Y1 _* x
* N* \) N& |) k& i0 T' Z1 K5 F
4 B5 H# S" D/ x; a) h看起来很复杂啊,所以曲高和寡,呵

该用户从未签到

 楼主| 发表于 2013-4-13 09:43:46 | 显示全部楼层
4# zhouxl2000 ' B4 S/ Y- v8 k1 n7 }  G* q8 o
试了好多次,还是不行,可能是我操作有误。# {* ?7 b" {9 k( x& ~
麻烦能不能截屏图片显示一下操作过程?
! I% {8 r5 n+ ~! O8 X( l& D谢谢!

该用户从未签到

 楼主| 发表于 2013-4-13 09:46:05 | 显示全部楼层
7# 惟吾无为 , B2 m" H5 l& y" f( Q7 r/ D
谢谢援手相助。

该用户从未签到

发表于 2013-4-13 11:37:51 | 显示全部楼层
7# 惟吾无为
! A9 n7 P; ]* S& G% L+ D  X. B- l- x: W1 O$ C. ~

& l- `1 A* K7 C7 y4 E0 T- S看起来很复杂啊,所以曲高和寡,呵
+ T4 i& ^" b* I+ E; Q  k' h4 T4 \" Csxingbai 发表于 2013-4-12 20:37

( m+ S0 m3 I" y9 N6 q$ b6 T- v4 W8 V" G( W
sed才叫真的复杂。! E7 }' b2 B- ~; @/ i0 s5 G
6 b% V) L- S  h! M0 ^
上面的代码我加了不少注释,去掉#号开头的行。没多少代码。

该用户从未签到

发表于 2013-4-13 11:40:41 | 显示全部楼层
10# tchon
2 U/ a+ c3 k0 u% t6 p5 O- d) x1 l/ e9 C$ ?# C5 s6 A$ C, q
8 |  h2 `/ q2 M, f
代码改过了。不然行首为大写时没法合并。
# l3 d) o" W0 i之前疏忽,只在注释中修改了,忘改代码了。

该用户从未签到

发表于 2013-4-15 16:21:11 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:33 编辑
: p( L( f+ P! P: Q/ `0 e
4# zhouxl2000 + w6 H( v$ ^; G
试了好多次,还是不行,可能是我操作有误。1 G! o' c. y. g! e
麻烦能不能截屏图片显示一下操作过程?
1 e# D! f  K8 ~. n- S/ I谢谢!
; g/ p1 b' v& H+ {; j+ \5 Z+ z) }tchon 发表于 2013-4-13 09:43
4 i' Y" e" d  p, o* H+ Z% r8 f# Y8 s
6 P/ x9 r1 d" r* ]9 Z
sorry,前面的替代有点问题,将后面的1也包括到单词中。! Y1 k# u1 ]% k

4 w$ k+ b+ m% X: I# U$ g5 r( kemeditor可以录制宏,将宏代码保存为test.jsee;2 h6 z8 l+ a0 Z
执行时: 宏--选择test.jsee--运行
' F: |8 [% ~! ~/ G7 j3 W# u) p宏代码:
  1. document.selection.Replace("\\n","", eeReplaceAll | eeFindReplaceRegExp);8 V" K* `& i% Y5 o* V$ I% ~. ~
  2. document.selection.Replace("</>","\\n</>\\n", eeReplaceAll | eeFindReplaceRegExp);
    / w0 b+ A) ^$ D0 M) D# B
  3. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);# A/ D( d5 |( d% q. m$ D/ V
  4. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    6 M8 g# f% u6 B7 R8 ]$ p( }
  5. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);! n0 v  R; _# u+ l
  6. document.selection.Replace("^([^\\d]+)(\\d.*)$","\\1\\n\\2",eeReplaceAll | eeFindReplaceRegExp);
    : V4 L7 ]% q8 e" L" h' g% @
  7. document.selection.Replace("<br>","<br>\\n",eeReplaceAll | eeFindReplaceRegExp);
    8 c0 y" V) k" G% m
  8. + k, l! E5 g0 r+ k9 |
复制代码
执行宏后:
  1. ! p8 E* K9 W7 i! T7 I0 [' O
  2. </>) o, _' |9 w2 y( z
  3. book
    6 G- A8 I) g) d( P, G
  4. 1 (C)<br>
    ; \3 }: G" L/ Z8 ]5 W* |& U
  5. a. 书,书籍; 著作<br>/ v$ q: }* S+ J& S) K
  6. read [write] a book<br>
    " Y( ?: L8 Q' r
  7. 读 [著] 书<br>
    8 i- n5 F- _' F* _0 q; c
  8. → closed book,open book.<br>3 h: Z$ y/ [' L8 u) N$ C( j
  9. b. 知识 [教训] 的泉源, (…之) 书<br>
    , J1 {$ r! K8 R/ O5 X. F" U
  10. the book of Nature <br>
    2 k7 C: \* B3 L
  11. 自然之书<br># A) ^3 E; d# Z# l7 i( F1 x
  12. * W  I8 w6 W6 |  N  a: c8 t
  13. </>
    + a. m' ^0 v0 h* h+ a! A
  14. bag
    4 k( G- A& V3 N3 @1 N
  15. 1 (C)<br>0 }+ U" @- E9 q" n/ S: j1 _
  16. a. 袋<br>! r5 {7 ?  ?( V$ a6 A; F  {# L
  17. a paper bag <br>
    7 b. v; R1 S  p8 x4 N8 G2 W- F
  18. 纸袋<br>- z! z, |9 U& F) l0 c
  19. → carry bag,doggie bag,tote bag.<br>
    ( w6 n/ l" V  Q6 K
  20. b. 猎物袋<br>
    # c* q7 |3 G, n- W/ t/ ]4 F
  21. 2 (C)<br>
    7 {$ ]. Q# ^( P/ {5 \7 S5 f
  22. a. 提袋; 旅行袋,提包<br>- ], N* j: f% M" q  N
  23. a traveling bag <br>
    & G# F  ~0 Z5 k$ n) r
  24. 旅行袋<br>
    4 ~1 e) z9 s1 {5 V

  25. ( u# [- H: q' @8 O! W
  26. </>, c2 ]5 ]' T7 P8 w: N! j" p$ G5 O- Z
  27. P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?例如:a paper ~ <br>  s' @# b% k1 w0 S0 X9 _
  28. 纸袋<br>
    ! x% V9 r7 t* [$ H8 Z
  29. 改为a paper bag 纸袋<br>$ p  x/ [: d: \+ I
复制代码

该用户从未签到

 楼主| 发表于 2013-4-17 23:37:38 | 显示全部楼层
12# 惟吾无为 0 @4 A$ f+ o) Q- h8 L& \1 M
谢谢!

该用户从未签到

 楼主| 发表于 2013-4-17 23:38:58 | 显示全部楼层
13# zhouxl2000 - t$ y6 Z2 x+ C
好的,谢谢!5 @8 U0 t3 F/ c. Y5 N$ `6 \
现在在外面的电脑没有装上emeditor。等过段时间回家再试一下。
. s, H$ v0 _% D4 r再次谢谢!

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-5-8 23:29 , Processed in 0.054519 second(s), 10 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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