掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1331|回复: 15

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

[复制链接]

该用户从未签到

发表于 2013-4-10 09:34:38 | 显示全部楼层 |阅读模式
21世纪电脑英汉汉英双向辞典中,每个词条下的正文中,都是用~来代替本词条。1 X( a9 l* `+ }
如果想将这里面所有的~替换回该词条,在ultraedit中如何应用正则表达式啊?谢谢!
" u  @+ {7 a4 D6 x8 `4 y0 B1 f例如:$ Y! n# y" l8 @7 ], b& R
</>
% K" X$ O- |' _! ~& @book
1 N$ E6 q4 b8 K+ m4 P( S% e9 G1 (C)<br>: y8 z: ?: I& ?: J8 L
a. 书,书籍; 著作<br>& S! B! ?; b6 l
read [write] a ~<br>
8 }+ c) V+ m7 t读 [著] 书<br># _+ P; E4 t+ z0 O4 u" n: U
→ closed book,open book.<br>
; F/ j/ f# H+ N# p% |: L9 Tb. 知识 [教训] 的泉源, (…之) 书<br>2 Z: G! J+ B, a
the ~ of Nature <br>( u" t1 s( b) K( Y2 X# }# O6 i5 g
自然之书<br>
! T7 A# M6 B1 m& i1 D0 o6 u* n$ F</>
( t5 d6 l2 N4 y: O+ X5 Kbag& \! s. g0 V! N, ~% s3 n1 ~  s
1 (C)<br>2 _( n0 b/ h  E. i. q- T0 S5 _/ j8 p
a. 袋<br>
: A! u' J4 G+ J% u4 ia paper ~ <br># o8 Y* `4 \, P2 m
纸袋<br>* V! Y* Q7 }; M! v5 Z8 o* E; T
→ carry bag,doggie bag,tote bag.<br>2 p* o4 a  p" [3 q) c
b. 猎物袋<br>
! K' p0 v. N8 \  \7 N/ u2 (C)<br>- w8 Q8 F2 t6 ]# }$ q/ s1 s
a. 提袋; 旅行袋,提包<br>* }" C7 o# @5 e# F( r- I( j/ Z
a traveling ~ <br>
8 l, r7 C  G" G5 S! I2 L旅行袋<br>8 r, k! k  ^' Q& ^
</>
) |$ v$ z: W# `6 M1 k3 @3 Q/ M6 `& s0 O2 D2 H. ]+ x
P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?% c9 u3 L/ q& ]# M- }
例如:( f& ~" r8 b3 `: [- B' B; N; k( O- }2 J
a paper ~ <br>5 ~$ w" s9 |+ t' G& f7 D- _$ L
纸袋<br>+ J- `9 T0 U0 s! `" H3 P& |" P0 D# Z
改为1 e2 D8 B! t& e" u
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 编辑
$ D: C& p/ u5 {3 u% A8 V
% `4 j+ N9 @0 j7 d4 s" v可以提供一个方法,在emeditor中测试可以:4 d- b( c0 C, {& f7 k0 E: u+ k( b
①所有\n替换成""(无);
- O4 s& f# r) ]0 l②</>替换成\n<\>\n;. \7 ?( b' D' ?
③^(.*?)( \(.*?)~(.*)$替换成\1\2\1\3,可以多替换几次;
4 P0 P& o' j: v9 h/ {; u$ I- N/ I# Z$ H③<br>替换成<br>\n.

该用户从未签到

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

该用户从未签到

发表于 2013-4-11 20:51:53 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 2 C2 o6 y/ X( j& g3 j! S
/ n# J* u# N4 |) F+ {4 X
文本处理,当然awk!
' S0 }2 K: S+ n' B$ iwindows请安装cygwin或msys。确保可以使用gawk。
" z8 [# q/ P) |- P2 B) K0 B4 _linux下面可以直接把代码粘贴到终端执行。9 w+ t: K' c% I+ g1 d7 A% j/ A
-----! O7 H5 z8 B+ C
我把你提供的内容保存到了文件o,使用awk完成了所述功能。
  1. gawk 'BEGIN{
    $ v) f3 M' A! T# u5 }2 w& b; ~
  2. # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。
    . A2 S$ z3 b; g( V  n6 I. {. c
  3. RS="\r\n</>\r\n"& j. f. d% \/ W1 g7 Q8 K
  4. # 字段分割符。把字段理解为一个句子。此时正好也是换行符。
    ! _4 L$ i: b7 l7 s' N' |, Q
  5. FS="\r\n"3 T7 D8 z/ K" q& N! y
  6. }{. ]2 o* N/ A0 q) z* y) f
  7. # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。& g$ L' z; b- U. M
  8. gsub("~",$1)
    9 Z0 n, H: C. P$ [& w. i; K
  9. # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的行。+ I' g/ ~4 \) ~$ z# e' q0 P, z) p
  10. # ([^\r\n]+)就是后面跟着的一行了,不限中英文。* z. G& k+ x- I3 I4 g) g
  11. # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。
    1 t( ?8 }# [1 W* A1 I/ F
  12. $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")7 Z7 y5 z5 l; F- f+ [) ^2 s( |
  13. # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。
    - {. b$ s4 q' K0 K& @# C
  14. # printf("%s%s",$0,RS) > "new.txt"
      p" |8 M' K( I4 O. o3 z
  15. printf("%s%s",$0,RS)! |' X8 X  D" K
  16. }' o
复制代码

该用户从未签到

发表于 2013-4-11 20:56:44 | 显示全部楼层
本帖最后由 惟吾无为 于 2013-4-13 11:41 编辑 + y7 W" I7 [9 G6 k, E

( M5 J( W% n2 F: y9 ]0 l5 W效果
  1. froms@froms-HP-g4:/dev/shm$ cat o  # 你的原始文本
    : }$ O1 C; F  C+ z

  2. ! o; t$ l/ r% A  o: Y- S- y
  3. </>0 W2 G4 H  F9 r1 O
  4. book
    + [) h) y5 N4 q( |+ _+ a0 u
  5. 1 (C)<br>
    4 s( x9 P* D) X' M3 k$ f
  6. a. 书,书籍; 著作<br>
    1 n6 F; S0 B1 ?7 F
  7. read [write] a ~<br>
    & _9 ~. `: u# g2 E
  8. 读 [著] 书<br>3 z1 n) j, G. b% s  q$ [7 o! j$ Z
  9. → closed book,open book.<br>' W" @* x5 f, h) e  }1 }; [6 M& D- `
  10. b. 知识 [教训] 的泉源, (…之) 书<br>: y+ C% Y/ r3 @
  11. the ~ of Nature <br>
    0 r8 K5 B# i) l  [
  12. 自然之书<br>
    0 K  @* \  v7 }: ~1 \
  13. </>3 c) l3 Z  S& e& M) _
  14. bag; M- u: h; J( S8 U2 u
  15. 1 (C)<br>+ T9 p* x" x' H( N* w9 I
  16. a. 袋<br>
    ' x; ]+ e+ b; h5 W1 J4 W# q
  17. a paper ~ <br>
    , v# W* K* b+ t5 i# O$ e
  18. 纸袋<br>  F( E; i. M; e' E1 {* o
  19. → carry bag,doggie bag,tote bag.<br>5 ^9 v1 S8 i# Y# l+ J( @3 k9 v4 S
  20. b. 猎物袋<br>
    ; l7 y# s' b9 |( f, _' f. D2 H7 r
  21. 2 (C)<br>5 n1 r; Z5 h4 k; Y
  22. a. 提袋; 旅行袋,提包<br>9 W7 J0 b, ?7 g0 I& s
  23. a traveling ~ <br>
    , T' b2 v. ^! \  E
  24. 旅行袋<br>
    & t9 E2 P9 {& {3 J
  25. </>
    / T  m& L7 A- }% r# V
  26. froms@froms-HP-g4:/dev/shm$ gawk 'BEGIN{: p  R3 {6 M2 G7 c+ q
  27. > # 记录分隔符。记录可以理解为一大段要处理的内容,这个就是段落分隔符了。0 |. G, X: Y( ]7 |/ ^5 q3 c
  28. > RS="\r\n</>\r\n"
    : c: x8 P; d3 m7 o
  29. > # 字段分割符。把字段理解为一个句子。此时正好也是换行符。( T% M8 ^' O1 y' U' Y3 O. _
  30. > FS="\r\n"  k" F. L) \" ^1 N6 w
  31. > }{0 S2 X+ o3 p- w' \: @* ?" f
  32. > # 你要把~替换成词条名字。因为文本分割后,标题是第一个字段。
    . {1 f& w! }( v, q$ {) H6 o
  33. > gsub("~",$1)
    2 n+ H7 Z7 n" d
  34. > # \n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n 匹配以字母开头的,以<br>结束的,没有中文的 行。
    0 V9 ]# E8 w. I2 b( r* ^# G" ]- k
  35. > # ([^\r\n]+)就是后面跟着的一行了,不限中英文。& ]: L/ i+ v4 s2 l0 o1 L
  36. > # \\1 \\2就是前面两个()里的东西了。 "g"表示全部替换。  U1 Z( X+ h, G% f5 ^5 k6 {5 D
  37. > $0=gensub("\n([a-zA-Z][ -~]*)<[bB][Rr]>\r\n([^\r\n]+)","\n\\1 \\2","g")6 _( ~- X# {& C% y( ]: s6 l9 h
  38. > # 把结果输出出来。如果想把结果写入文件new.txt,把下面一行的#号去掉。
    . p5 t! g0 ?% ~9 B% T: P
  39. > # printf("%s%s",$0,RS) > "new.txt"
    ( Q( l7 i) D' n/ r& i
  40. > printf("%s%s",$0,RS)# T: }' w/ p6 V/ j
  41. > }' o    # 粘贴代码。回车,结果如下。
    / a" p0 W4 _! q0 h' ~
  42. ! U4 C- u/ N6 q; i2 V
  43. </>
    + j3 @; p' o' C# W$ s
  44. book  J- H# t3 h7 O
  45. 1 (C)<br># B! c, V( j2 w+ R! C
  46. a. 书,书籍; 著作<br>
    $ Z# \0 D" Y; A' |( p; }
  47. read [write] a book 读 [著] 书<br>
    ) [& C: T" R9 v+ N8 r4 r
  48. → closed book,open book.<br>
    9 o4 A( _" _7 Q& _4 k
  49. b. 知识 [教训] 的泉源, (…之) 书<br>
    / ]7 m3 [- ?9 ~* g
  50. the book of Nature  自然之书<br>- {  G9 D7 A7 v" q  b; M# \
  51. </>, ]$ R% ^( P8 R6 ~
  52. bag* C' b9 O/ h* z3 X9 a
  53. 1 (C)<br>
    & `% A+ y7 R' W# S  d, V' ?$ T
  54. a. 袋<br>7 h% n' ]7 i+ }" `# {
  55. a paper bag  纸袋<br>4 a- p% H9 Q0 q
  56. → carry bag,doggie bag,tote bag.<br>: U1 S% y! n7 `  w$ ]" b. j9 m
  57. b. 猎物袋<br>
    9 k( ]$ |2 v, {: ?8 l1 \
  58. 2 (C)<br>
    # d. O/ w, J. S4 o6 O
  59. a. 提袋; 旅行袋,提包<br>
      E! S( w1 u2 U- K
  60. a traveling bag  旅行袋<br>+ L) ~6 _' `1 }/ D8 r
  61. </>
    , y& w+ j7 I; c# K2 `
复制代码

该用户从未签到

发表于 2013-4-12 20:37:14 | 显示全部楼层
7# 惟吾无为 # U4 M) W+ h3 ^" Y$ i$ v

$ t: u7 H  b' [8 o4 r9 h. }$ {( h6 f9 {. R' E. N
看起来很复杂啊,所以曲高和寡,呵

该用户从未签到

 楼主| 发表于 2013-4-13 09:43:46 | 显示全部楼层
4# zhouxl2000 / C. P% ?. u! O$ ]
试了好多次,还是不行,可能是我操作有误。$ x9 s, P* p$ b2 L" g
麻烦能不能截屏图片显示一下操作过程?
  ?5 n5 I& w+ R7 e; o, o谢谢!

该用户从未签到

 楼主| 发表于 2013-4-13 09:46:05 | 显示全部楼层
7# 惟吾无为 3 ]  l* ~% m$ ^$ y. I( D9 k2 [
谢谢援手相助。

该用户从未签到

发表于 2013-4-13 11:37:51 | 显示全部楼层
7# 惟吾无为
2 P+ |: t3 Z6 }5 j: G. r! a* m; a+ {

- h, Z) j: L% p" w  f看起来很复杂啊,所以曲高和寡,呵
% h' w6 W/ Z% n* bsxingbai 发表于 2013-4-12 20:37

# G; ~6 u2 V: f3 ~8 q9 e5 H" r4 G- I/ B. s
sed才叫真的复杂。1 c( `& u6 i& X  P4 c: t

4 v5 k) ~( y, p" F3 s上面的代码我加了不少注释,去掉#号开头的行。没多少代码。

该用户从未签到

发表于 2013-4-13 11:40:41 | 显示全部楼层
10# tchon + e$ u8 ]& u7 Q3 E
* m. G( ?, A& P$ R! p

: Y4 K% z- u" t; X6 \代码改过了。不然行首为大写时没法合并。
8 d8 W4 Q* K, X. l6 |/ s9 x; Z6 f之前疏忽,只在注释中修改了,忘改代码了。

该用户从未签到

发表于 2013-4-15 16:21:11 | 显示全部楼层
本帖最后由 zhouxl2000 于 2013-4-15 16:33 编辑
- }. o6 R0 R; h. w) |8 l( B% f
4# zhouxl2000
2 J! e6 t+ R. s) B! P/ e试了好多次,还是不行,可能是我操作有误。
5 d  L* P3 }) s) I: e麻烦能不能截屏图片显示一下操作过程?
" S9 M7 ~, g; i8 Z9 w1 D谢谢!, p# ~3 _8 J1 Y0 R, c
tchon 发表于 2013-4-13 09:43
- `* l2 _  E4 A, U0 ?, Y& @/ P

" B8 K. R0 f5 X8 r- e& ^* D+ Csorry,前面的替代有点问题,将后面的1也包括到单词中。
3 H( O: e; j' v. L% L6 u6 ^; Z! N
: X( T; F- y: J. U2 r4 Bemeditor可以录制宏,将宏代码保存为test.jsee;
; X  c7 r0 r4 m) R执行时: 宏--选择test.jsee--运行
7 X9 V! b# ?) c% \( k$ a. W宏代码:
  1. document.selection.Replace("\\n","", eeReplaceAll | eeFindReplaceRegExp);
    8 \) C/ ]. c4 U: `
  2. document.selection.Replace("</>","\\n</>\\n", eeReplaceAll | eeFindReplaceRegExp);
    1 Y+ G1 f1 z, V  F+ ]  [
  3. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    , V9 ^0 Q: _( O2 e5 y8 J& G
  4. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);
    * w: K3 `" V& ]- F' I
  5. document.selection.Replace("^([^\\d]+)(\\d.*?)~(.*)$","\\1\\2\\1\\3",eeReplaceAll | eeFindReplaceRegExp);0 J. B6 u1 E6 v* M: [; o. [' f0 G
  6. document.selection.Replace("^([^\\d]+)(\\d.*)$","\\1\\n\\2",eeReplaceAll | eeFindReplaceRegExp);
    # A) _7 F8 @' D, u( ?, u% b
  7. document.selection.Replace("<br>","<br>\\n",eeReplaceAll | eeFindReplaceRegExp);
    0 d! l" T  h) v$ B- ~0 {% B

  8. 9 @- _( q, x; N# e/ C+ O, S
复制代码
执行宏后:
  1. * ]7 M4 v) ~* P7 J+ Y
  2. </>
    * W. x2 ]  N: J
  3. book
    - P7 ^2 ^& x( r/ q6 z
  4. 1 (C)<br>% D1 b4 [& \9 L# U2 ]
  5. a. 书,书籍; 著作<br>8 b, o, `! _8 x1 e
  6. read [write] a book<br>
    9 L- ]) a8 p& ~9 U0 X3 m3 ?$ r- {  i8 A
  7. 读 [著] 书<br>3 E5 O1 w9 N# F/ A( p+ q
  8. → closed book,open book.<br>4 F4 v! f) R/ [4 U, ]5 C7 x+ S
  9. b. 知识 [教训] 的泉源, (…之) 书<br>
    : T% h: \( B5 m6 r8 ?3 c
  10. the book of Nature <br>5 i% \$ t% R5 n" p+ s/ u
  11. 自然之书<br>  p5 n8 f6 z0 u( B3 {

  12. $ L/ L4 s8 H$ Z; d- _
  13. </>" ]% i6 Y- `1 J+ S
  14. bag6 [8 B" e6 J0 G4 D% i
  15. 1 (C)<br>
    , u$ g) m! P( {, H4 _
  16. a. 袋<br>
    3 j0 F8 O$ ]( n" r
  17. a paper bag <br>
    " ^3 a5 u# R! h. t
  18. 纸袋<br>/ e/ I' I# J7 b. o& E, Y5 C
  19. → carry bag,doggie bag,tote bag.<br>9 r/ M; b4 T; K9 _% y3 r+ d
  20. b. 猎物袋<br>
    & b2 h( ^" k5 F" M
  21. 2 (C)<br>
    1 c/ d/ \1 P6 B/ d
  22. a. 提袋; 旅行袋,提包<br># [9 W4 A; l# s0 Y& d
  23. a traveling bag <br>
    % w2 I$ s& S) ^& ?: L2 @
  24. 旅行袋<br>
    : u4 _3 o, Y# w1 j- ^8 W

  25. - v( N& u, r9 i$ h2 b) H+ _  z5 u
  26. </>
    2 U/ Y5 \/ b5 c: ?/ S. A
  27. P.S.我还想将例句的英文和中文摆在同一行,不过可能难度很高?例如:a paper ~ <br>
    2 ]( }0 t+ l; K
  28. 纸袋<br>
    ; _7 i$ h; M+ G3 E
  29. 改为a paper bag 纸袋<br>
    . g) R6 d' E0 r6 f6 Q
复制代码

该用户从未签到

 楼主| 发表于 2013-4-17 23:37:38 | 显示全部楼层
12# 惟吾无为 & m) d8 I6 x. u( C* V
谢谢!

该用户从未签到

 楼主| 发表于 2013-4-17 23:38:58 | 显示全部楼层
13# zhouxl2000
$ {$ m  G3 D' c: h) a/ U好的,谢谢!
1 Q$ o; Y, g( a. A现在在外面的电脑没有装上emeditor。等过段时间回家再试一下。
" z4 g4 C; \  R2 D! X7 y再次谢谢!

该用户从未签到

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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