掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1661|回复: 15

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

[复制链接]

该用户从未签到

发表于 2013-4-10 09:34:38 | 显示全部楼层 |阅读模式
21世纪电脑英汉汉英双向辞典中,每个词条下的正文中,都是用~来代替本词条。7 A" T- G2 i; n8 |# A3 n; q
如果想将这里面所有的~替换回该词条,在ultraedit中如何应用正则表达式啊?谢谢!
" o2 u2 M3 y! D6 k! d例如:
4 [+ [0 D4 @' {4 o7 {2 b</>
% O6 o- A# f- m' _. ~book
4 i! Q; D4 X3 F1 (C)<br>! k: v6 q: n8 v/ ?8 c. v/ p
a. 书,书籍; 著作<br>. B8 _; D9 Y* Q* E
read [write] a ~<br>6 l* l8 w% b$ Q# _
读 [著] 书<br>0 q' c# H" E. c4 f% l
→ closed book,open book.<br>
7 T* m$ M: M# x0 {0 o* K$ `b. 知识 [教训] 的泉源, (…之) 书<br>& H/ t* m% E" e3 C; m/ T9 `1 W
the ~ of Nature <br>7 {( T. A# |# V& U- b
自然之书<br>9 o; g' F8 j2 |2 U4 V0 m. `
</>  f- c% a; M. o/ z6 o  v6 M
bag8 M. o% J! g& w  l8 T: U$ ~: p
1 (C)<br>
2 m; A& Y7 W2 `/ H1 ma. 袋<br>
, k6 p  p) G) G; Sa paper ~ <br>
* ^. }! z( |/ ^3 D* F纸袋<br>+ z- j8 l6 J4 }( s" G
→ carry bag,doggie bag,tote bag.<br>
1 P; [) \6 D; Q& Q* [8 z" m- u" `b. 猎物袋<br>
$ Z$ Y1 x0 x0 D  s4 m+ g5 q- C2 (C)<br>
- U# J7 F( v3 V$ q1 la. 提袋; 旅行袋,提包<br>
! Q' u6 \: |: I+ n  V- qa traveling ~ <br>
6 k: u) O; [5 u3 P7 q* e旅行袋<br>
# v, n6 O* @: ?( _. g( n</>
8 ?( U# F' t' O- A, v! P) z, T2 N# c
P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?. B( ]: Q/ j) z2 ^! I) g
例如:# J1 U# T4 u" u
a paper ~ <br>
/ F: [& b0 m5 ~+ E$ [纸袋<br>: o3 J3 H7 p# e$ N  Y4 k
改为3 ^' G! {9 {/ C) f( q8 R1 V( I
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 编辑
2 v' ?6 c: v2 E; g% y8 _& x8 S% h4 c! L- c$ F8 f, _9 ^5 w
可以提供一个方法,在emeditor中测试可以:5 V* }1 K  E1 @7 t* V% Q1 P  b7 i
①所有\n替换成""(无);
. `% s0 K' m, r( ^: P3 P9 ]3 d$ j②</>替换成\n<\>\n;
5 [  a. m/ [. N+ ]# h③^(.*?)( \(.*?)~(.*)$替换成\1\2\1\3,可以多替换几次;
: E# o3 h( l' }. s③<br>替换成<br>\n.

该用户从未签到

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

该用户从未签到

发表于 2013-4-11 20:51:53 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑
6 U+ ~. T% L* i( |# t
1 Q; H6 ~& R1 V+ R" p文本处理,当然awk!& u( f, A8 h% y
windows请安装cygwin或msys。确保可以使用gawk。. {) M- y3 C: e: z- u% r' @) ?
linux下面可以直接把代码粘贴到终端执行。
5 @% {8 p# _2 k# k-----3 [$ ^. z" p+ k6 J  Q% k9 o7 y
我把你提供的内容保存到了文件o,使用awk完成了所述功能。
  1. gawk 'BEGIN{
    ( ~  O0 Y- O4 S1 n: K3 B2 y
  2. # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。! w. Q( e' D* a. k) A
  3. RS="\r\n</>\r\n"$ l* c! E0 k! N% S
  4. # 字段分割符。把字段理解为一个句子。此时正好也是换行符。3 Z' [: A# X% [/ p3 e- b
  5. FS="\r\n"
    9 U/ v: u7 g" H; I* X' w! R4 Z
  6. }{
    , x6 `% P. Q; Q% d$ u4 S. S. G
  7. # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。
    2 D- T9 B" c9 u: }) U# o
  8. gsub("~",$1)/ g5 G7 B1 ], O$ m
  9. # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的行。
    6 r0 a/ X- z4 l0 I  o# |6 e( n  Z
  10. # ([^\r\n]+)就是后面跟着的一行了,不限中英文。
    1 I1 N9 G: _& y: P7 _3 z2 I
  11. # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。
    . I; ]8 k# |" t/ X6 h0 D" z
  12. $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    8 m* ^- Q/ s/ I- n) L6 N/ x. n: {! \6 L/ ~
  13. # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。' `8 g9 D: s" c# _7 B/ V( K
  14. # printf("%s%s",$0,RS) > "new.txt"4 q- w; L2 Z" l9 c' @) J6 L# v
  15. printf("%s%s",$0,RS)4 a# S. l  S7 Z* b
  16. }' o
复制代码

该用户从未签到

发表于 2013-4-11 20:56:44 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑
* S7 |+ i- ^" M  P. Y) p8 {5 ]1 J& r! o
& C5 g8 ?" g9 ~+ p2 f效果
  1. froms@froms-HP-g4:/dev/shm$ cat o  # 你的原始文本
    * U+ B* f5 U7 G2 r# J( C

  2. , ^0 C7 V/ _- X, c, r* c
  3. </>
    / o- ]) t, z, {% K
  4. book
    # X# d+ m$ `. f( f  J) u3 ^' G
  5. 1 (C)<br>
    1 |; Y0 \2 W1 p% y  n' t3 N
  6. a. 书,书籍; 著作<br>
    ( d( |( P3 K9 Q! U. d/ ?1 q' i
  7. read [write] a ~<br>
    $ ?3 {7 ^" U& i/ a, {
  8. 读 [著] 书<br>
    6 t# k4 a; {9 S/ c6 K
  9. → closed book,open book.<br>5 v! f* }1 Q" S/ c9 Y; W3 J% E
  10. b. 知识 [教训] 的泉源, (…之) 书<br>. Q; |& L( U# P  x2 c* M0 n  `/ k! |
  11. the ~ of Nature <br>* [" n2 h, D; F/ N  a% y
  12. 自然之书<br>
    6 h/ e2 C3 M1 j1 F( r
  13. </>
    7 U" W- k& Z* m$ V* J1 Z$ ?9 C
  14. bag4 ]7 Z, z3 W7 I
  15. 1 (C)<br>
    . S3 s/ \1 U6 w5 t9 M: C
  16. a. 袋<br>
    0 b7 P( |3 P; ^5 l
  17. a paper ~ <br>
    % g/ G8 T8 d0 ?0 o5 M% O
  18. 纸袋<br>  m( P; {2 q% {* u/ t
  19. → carry bag,doggie bag,tote bag.<br>
    ) g2 T  ~) J! y) j
  20. b. 猎物袋<br>
    5 ]  h& o0 `1 Q3 P; `6 Y" y
  21. 2 (C)<br>
    + O1 E: s( l7 o5 A
  22. a. 提袋; 旅行袋,提包<br>" l1 l0 m3 H$ ~" p5 X9 F
  23. a traveling ~ <br>
    . h* Z' |6 n6 P6 l6 c/ `
  24. 旅行袋<br>
    " \& u4 Q1 W$ m: A; I5 n- |
  25. </>/ S* h, Q" c! \* e& Q- ~0 ~- k6 P
  26. froms@froms-HP-g4:/dev/shm$ gawk 'BEGIN{2 N( G+ f* ~4 J% e) s& \4 ^; m
  27. > # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。2 p2 l$ N. |: Y0 Z, V- }" P
  28. > RS="\r\n</>\r\n"
    # l3 V5 w+ m2 K/ T  @3 N7 V- X
  29. > # 字段分割符。把字段理解为一个句子。此时正好也是换行符。
    6 {6 {3 d& d( Y  [, l' W; x
  30. > FS="\r\n"6 l, O4 l6 k6 T0 H, ~& o
  31. > }{/ C! a& ^! ]1 A1 Y) \# N8 R
  32. > # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。; u6 i9 i7 i& H+ K
  33. > gsub("~",$1)( Z" q  P2 W: j2 l6 p
  34. > # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的 行。
    % {, n3 c( Z3 W4 z
  35. > # ([^\r\n]+)就是后面跟着的一行了,不限中英文。
    * U* r$ O. N! v5 q, R, c6 F
  36. > # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。, [. Z; l" Q; X: i
  37. > $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")
    . C/ V' f( }( Q- r9 r, Q
  38. > # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。
    " Z7 J! B. d2 O0 H+ [7 k& Q% c
  39. > # printf("%s%s",$0,RS) > "new.txt", C6 ^5 p3 ?  T5 ~% T/ k) |
  40. > printf("%s%s",$0,RS)
    , ^  }/ K" L( p+ U: N) z
  41. > }' o    # 粘贴代码。回车,结果如下。
    1 T) O3 [7 l6 y, l8 r

  42. % `; U! P1 {# w
  43. </>
    + ^# l9 Y( u" L) s; f% z! B
  44. book! T( y! f6 X. @( `, S0 c9 _
  45. 1 (C)<br>9 b: j9 z! m. {$ B2 b/ p; e
  46. a. 书,书籍; 著作<br>
    % u7 l) D( O0 `; Z; C
  47. read [write] a book 读 [著] 书<br>
    ) G, ?; `( o$ u4 r
  48. → closed book,open book.<br>
    ' q  G( e( |' \: O2 x$ f
  49. b. 知识 [教训] 的泉源, (…之) 书<br>% U- v0 E% s5 z  N+ ?' t
  50. the book of Nature  自然之书<br>+ N, I' ?% d" R" v
  51. </>4 L: U- z9 s* Z; [
  52. bag1 W7 E5 v7 }+ }" w
  53. 1 (C)<br>
    + N9 V5 b* ^4 K9 T/ k
  54. a. 袋<br>" H' c% U0 ~: [3 A0 T9 i
  55. a paper bag  纸袋<br>1 i3 E0 |5 N2 y- g
  56. → carry bag,doggie bag,tote bag.<br>
    " X+ z2 P8 a% m. W4 Q! ?
  57. b. 猎物袋<br>9 K# l# \* N- b- K' O
  58. 2 (C)<br>
    % ^, H  u5 b% o  K* F7 s1 d4 B3 g
  59. a. 提袋; 旅行袋,提包<br>* i4 _; U# Z9 \1 t# `
  60. a traveling bag  旅行袋<br>/ {9 p1 @# \1 q
  61. </>
    9 X7 j4 |. V% i$ z* r
复制代码

该用户从未签到

发表于 2013-4-12 20:37:14 | 显示全部楼层
7# 惟吾无为
' m% q* X, u/ U9 C- ]. N. c; \
! ]; S+ S6 |# Z3 [: |% t. b: c" M3 ^& A& r
看起来很复杂啊,所以曲高和寡,呵

该用户从未签到

 楼主| 发表于 2013-4-13 09:43:46 | 显示全部楼层
4# zhouxl2000
' V0 r6 Y2 p$ @5 c% g/ }8 M试了好多次,还是不行,可能是我操作有误。# b/ b7 D2 P% g6 a2 S, _/ K- [
麻烦能不能截屏图片显示一下操作过程?
0 }, N! L; x* p2 _+ ?谢谢!

该用户从未签到

 楼主| 发表于 2013-4-13 09:46:05 | 显示全部楼层
7# 惟吾无为
' D5 ^5 W" s- t9 e2 e) d谢谢援手相助。

该用户从未签到

发表于 2013-4-13 11:37:51 | 显示全部楼层
7# 惟吾无为
1 U$ [0 k, a4 M1 y8 l3 W* M1 N
# x) Y& P, p0 y9 }* J8 H
2 a: r0 x* G% p. A; a' I看起来很复杂啊,所以曲高和寡,呵
6 k3 t0 S1 v4 ?sxingbai 发表于 2013-4-12 20:37

# U2 K+ ?2 V1 }! L. ?' A3 P: b
sed才叫真的复杂。% y, D0 y9 J, I* [

2 P6 h) q0 |0 B% A上面的代码我加了不少注释,去掉#号开头的行。没多少代码。

该用户从未签到

发表于 2013-4-13 11:40:41 | 显示全部楼层
10# tchon ( N8 C" R2 F/ E/ |! d; c

8 I7 c% [6 n/ |3 a( d
8 C- l8 w1 m- `; D; C" f9 ]  \代码改过了。不然行首为大写时没法合并。, f- v, R- _. I: Z" t) Y2 z
之前疏忽,只在注释中修改了,忘改代码了。

该用户从未签到

发表于 2013-4-15 16:21:11 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:33 编辑 ' j' L: h9 I# c. F: B
4# zhouxl2000 ( Z  S* Q+ C# B; {: x$ p8 ^
试了好多次,还是不行,可能是我操作有误。
! W2 v6 V  h2 F8 D! F8 [麻烦能不能截屏图片显示一下操作过程?$ F( t; F/ ]  s: _/ q/ P. T
谢谢!# y* r5 K: Y+ ^6 U5 G* K
tchon 发表于 2013-4-13 09:43

) C4 r( |2 B+ h4 t; ^3 S% X2 l3 D6 C. h( F4 t/ I4 B  q
sorry,前面的替代有点问题,将后面的1也包括到单词中。. i; K4 w( Z' c& V$ R* X9 `
4 W. R  P; y8 b" J
emeditor可以录制宏,将宏代码保存为test.jsee;6 ^. k. Y7 u! h7 n5 U8 J
执行时: 宏--选择test.jsee--运行2 ^- d- E4 y: v- s" G" c
宏代码:
  1. document.selection.Replace("\\n","", eeReplaceAll | eeFindReplaceRegExp);* c; |5 n, Y! C7 s$ S& \% |
  2. document.selection.Replace("</>","\\n</>\\n", eeReplaceAll | eeFindReplaceRegExp);! z3 R) k; d; I1 U4 p
  3. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    - E. x! L2 M9 I5 E. n
  4. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);: b5 m/ \+ }% Z0 q$ ]2 A
  5. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);3 }/ i; R( d6 y- G$ z, x
  6. document.selection.Replace("^([^\\d]+)(\\d.*)$","\\1\\n\\2",eeReplaceAll | eeFindReplaceRegExp);
    ; v; j  k% }6 ^" O& h, T, A
  7. document.selection.Replace("<br>","<br>\\n",eeReplaceAll | eeFindReplaceRegExp);
      [! h4 s/ g  g/ b* z1 H
  8. ( @, `# H( z- m' M- H& }6 x
复制代码
执行宏后:

  1. 1 L) Y. X9 K4 N% h
  2. </>, X3 B7 O# I3 B# g, x
  3. book
    1 R: q! l; p) s6 D# S6 h$ `. s
  4. 1 (C)<br>( Z: c4 L) t) E2 @5 @
  5. a. 书,书籍; 著作<br>
    ' H- b$ u9 B5 i% k* O2 B  n9 h
  6. read [write] a book<br>
      f+ J4 {  c; s+ }
  7. 读 [著] 书<br>5 e! z4 s. r4 I: w  t' E
  8. → closed book,open book.<br>6 e3 p1 D* |# }# w( y# e- i# `
  9. b. 知识 [教训] 的泉源, (…之) 书<br>
    / |) J# l& B; K6 \3 V7 T" \
  10. the book of Nature <br>8 L8 v9 i& I0 M  z
  11. 自然之书<br>/ j- p' O3 K( F; i( {
  12. ; M- w2 q. t: a# ~
  13. </>
    6 U/ M( Z) X+ \4 W! k
  14. bag) ^- L1 \9 O& {5 O- ?4 l3 V6 j
  15. 1 (C)<br>  H: q) q- d5 v+ S( v
  16. a. 袋<br>
    6 T0 V  A6 N) c: s; m6 o
  17. a paper bag <br>3 J( C7 |, `- K7 P8 s( {  R
  18. 纸袋<br>7 K# i0 o# ?8 ?7 u: w
  19. → carry bag,doggie bag,tote bag.<br>" M  i3 v, f1 A* m" X4 x0 T
  20. b. 猎物袋<br>
    - r) S) X) r# |. f* X- a
  21. 2 (C)<br>
    3 q2 U$ f8 x" K2 _  y/ |
  22. a. 提袋; 旅行袋,提包<br>* H! \3 a! J( ~' G+ N! g$ r) p: b
  23. a traveling bag <br>5 i2 _6 J& ~3 E5 F& N
  24. 旅行袋<br>
    2 y, b5 Q( O8 H& u( x3 c1 ^$ Z

  25. - W+ ^& n3 Y1 K! |2 B5 O( H
  26. </>; S: K; y6 y5 K( x2 c
  27. P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?例如:a paper ~ <br>; Q+ [, K2 I  k7 Y6 i
  28. 纸袋<br>5 |" g/ O2 f5 w& t' c! m
  29. 改为a paper bag 纸袋<br>" {5 J$ P+ t, N3 N2 j4 x4 y& d
复制代码

该用户从未签到

 楼主| 发表于 2013-4-17 23:37:38 | 显示全部楼层
12# 惟吾无为
, ?' m! C) a8 ~& F' X4 U谢谢!

该用户从未签到

 楼主| 发表于 2013-4-17 23:38:58 | 显示全部楼层
13# zhouxl2000 - _* J# `; Z7 K2 t
好的,谢谢!
5 m% N& ~! M5 f9 X现在在外面的电脑没有装上emeditor。等过段时间回家再试一下。: E6 k. @; x, g3 W4 Q' U! j8 A
再次谢谢!

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-5-4 11:51 , Processed in 0.030156 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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