用perl正则表达式替换一些变音符号

时间:2015-08-09 14:45:12

标签: regex perl replace

我想用ASCII等效替换文件中包含的变音符的部分。请注意,我不想删除所有变音符号:只删除每行的第一个“@”字符之前的那些。

在下面文件的简化版本(a.glo)中,有四个“é”(粗体)替换为“e”。 我使用的(可能是丑陋的)正则表达式是:

(\\glossaryentry\{(\w|\s|\.)*)(é|è|ê|ë|É|È|Ê|Ë|ē)+

它适用于在线测试仪,如www.regex101.com/和notepad ++!

但是当我输入Windows命令行时没有任何改变:

perl -pi -i.bak -e "s/(\\glossaryentry\{(\w|\s|\.)*)(é|è|ê|ë|É|È|Ê|Ë|ē)+/$1e/g" a.glo

(fwiw,在我的系统上,perl是v.5.20.2)

a.glo:

  

\ glossaryentry {AHRF @ {\ memgloterm {AHRF}} {\ memglodesc {Annales historiques delaRévolutionfrançaise}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {屁股。 pl é n。@ {\ memgloterm {Ass。 plén。}} {\ memglodesc {Assembléepénière}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {章。 r é un。@ {\ memgloterm {Ch。 réun。}} {\ memglodesc {Chambresréunies}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {chron。@ {\ memgloterm {chron。}} {\ memglodesc {chronique}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {西尔克。 min。@ {\ memgloterm {Circ。 min。}} {\ memglodesc {Circulaireministérielle}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {é d。@ {\ memgloterm {éd。}} {\ memglodesc {édition,éditépar}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {Int J Semiot Law @ {\ memgloterm {Int J Semiot Law}} {\ memglodesc {International Journal of the Semiotics of Law - Revue internationaledesémiotiqueruurique}} {\ memgloref {}} | memjustarg} { 1}

     

\ glossaryentry {Oxford J Legal Studies @ {\ memgloterm {Oxford J Legal Studies}} {\ memglodesc {Oxford Journal of Legal Studies}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {pr é c。@ {\ memgloterm {préc。}} {\ memglodesc {précité}} {\ memgloref {}} | memjustarg} {1}

     

\ glossaryentry {启。 adm。@ {\ memgloterm {Rev。 adm。}} {\ memglodesc {Revue administrative}} {\ memgloref {}} | memjustarg} {1}

1 个答案:

答案 0 :(得分:2)

我在一个Windows框上试过这个,它有效 我认为该文件必须以正确的编码打开 我将您的文本示例保存为ANSI文本。

perl -pi -i.bak -e "s/(\\glossaryentry\{[\w\s.]*)[\x{E9}\x{E8}\x{EA}\x{EB}\x{C9}\x{C8}\x{CA}\x{CB}\x{113}]+/$1e/g" a.glo

 # (\\glossaryentry\{[\w\s.]*)[\x{E9}\x{E8}\x{EA}\x{EB}\x{C9}\x{C8}\x{CA}\x{CB}\x{113}]+

 (                             # (1 start)
      \\ glossaryentry \{
      [\w\s.]* 
 )                             # (1 end)
 [\x{E9}\x{E8}\x{EA}\x{EB}\x{C9}\x{C8}\x{CA}\x{CB}\x{113}]+