ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 26041|回复: 20

[Word查找与替换]:中英文分离案例与总结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-7-22 05:58 | 显示全部楼层 |阅读模式

案例如下:(相关链接http://club.excelhome.net/viewthread.php?tid=107007---可能会转到开放式竞赛区,到时再修改链接)

i see我明白了i quit我不干了let go放手me too我也是

my god天哪no way不行come on来吧hold on等一等

i agree我同意not bad还不错not yet还没see you再见

shut up闭嘴so long再见why not好呀allow me让我来

be quiet安静点cheer up振作起来good job做得好have fun玩得开心

how much多少钱i'm full我饱了i'm home我回来了i'm lost我迷路了

my treat我请客so do i我也一样this way这边请after you您先

bless you祝福你follow me跟我来forget it休想good luck祝好运

i decline我拒绝i promise我保证of course当然了slow down慢点

take care保重they hurt疼try again再试试watch out当心

what's up有什么事吗be careful注意bottoms up干杯don't move不许动

guess what猜猜看i doubt it我怀疑i think so我也这么想i'm single我是单身贵族

keep it up坚持下去let me see让我想想never mind不要紧no problem没问题

that's all就这样time is up时间快到了what's new有什么新鲜事吗count me on算上我

don't worry别担心feel better好点了吗i love you我爱你i'm his fan我是他的影迷

is it yours这是你的吗that's neat这很好are you sure你肯定吗do l have to非做不可吗

he is my age他和我同岁here you are给你no one knows没有人知道take it easy别紧张

what a pity太遗憾了any thing else还要别的吗to be careful一定要小心do me a favor帮个忙好吗

help yourself别客气i'm on a diet我在节食keep in touch保持联络time is money时间就是金钱

who's calling是哪一位you did right你做得对you set me up你出卖我can i help you我能帮你吗

enjoy yourself祝你玩得开心excuse mesir先生对不起give me a hand帮帮我how's it going怎么样

i have no idea我没有头绪i just made it我做到了i'll see to it我会留意的i'm in a hurry我在赶时间

it's her field这是她的本行it's up to you由你决定just wonderful简直太棒了what about you你呢

you owe me one你欠我一个人情you're welcome不客气any day will do哪一天都行夕are you kidding你在开玩笑吧

congratulations祝贺你t can't help it我情不自禁i don't mean it我不是故意的i'll fix you up我会帮你打点的

it sounds great听起来很不错it's a fine day今天是个好天so farso good目前还不错what time is it几点了

you can make it你能做到control yourself克制一下he came by train他乘火车来he is ill in bed他卧病在床

he lacks courage他缺乏勇气how's everything一切还好吧i have no choice我别无选择i like icecream我喜欢吃冰淇淋

i love this game我钟爱这项运动i'll try my best我尽力而为i'm on your side我全力支持你long time no see好久不见

no painno gain不劳无获wellit depends噢这得看情况we're all for it我们全都同意what a good deal真便宜

what should i do我该怎么办you asked for it你自讨苦吃you have my word我保证believe it or not信不信由你

don't count on me别指望我don't fall for it别上当don't let me down别让我失望easy come easy go来得容易去得快

i beg your pardon请你原谅i beg your pardon请您再说一遍i'll be back soon我马上回来i'll check it out我去查查看

it's a long story说来话长it's sunday today今天是星期天just wait and see等着瞧make up your mind做个决定吧

that's all i need我就要这些the view is great景色多么漂亮the wall has ears隔墙有耳there comes a bus汽车来了

what day is today今天星期几what do you think你怎么认为who told you that谁告诉你的who's kicking off现在是谁在开球

yesi suppose so是的我也这么认为you can't miss it你一定能找到的any messages for me有我的留言吗don't be so modest别谦虚了

don't give me that少来这套he is a smart boy他是个小机灵鬼he is just a child他只是个孩子i can't follow you我不懂你说的

i felt sort of ill我感觉有点不适i have a good idea我有一个好主意it is growing cool天气渐渐凉爽起来it seems all right看来这没问题

it's going too far太离谱了may i use your pen我可以用你的笔吗she had a bad cold她患了重感冒that's a good idea这个主意真不错

the answer is zero白忙了what does she like她喜欢什么as soon as possible越快越好he can hardly speak他几乎说不出话来

he always talks big他总是吹牛he won an election他在选举中获胜i am a football fan我是个足球迷if only i could fly要是

[此贴子已经被作者于2005-7-22 7:03:10编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-22 06:00 | 显示全部楼层

分析与总结:

中英文分离与WORD的查找与替换的总结

在本次的测试题中,我们继续考查WORD中的复杂查找与替换,当然,查找是关键。正确地分析文档中现有文本与目标文本的差异,以及查找项目与非查找项目之间的差异,才能正确地区分两者,才能让WORD正确地查找到我们需要的文本;当然,在分析的过程中,势必存在分离的效率的问题,查找与替换的次数问题,查找与替换的处数问题。

现在,我们就地分析中英文分离这个样本文档,在这个文档中,存在有:中文字符,空格,英文字符,段落标记,''(撇号)等。就此文档而言,WORD为我们准备了这些查找项目(包括通配符):

所有英文字符,可以为"[a-z]"、"[A-Z]"注意,必须用升序来表示该范围;"^$"(任意字母),"^?"(任意字符,任意字符涵盖任意字母)

空格,可以直接为" "表示;段落标记可以以两种方式表示,"^p"或者"^13",其中"13"表示字符的ASCII码,在EXCEL中或者在VBA中,我们可以使用EXCEL.CODE(直接使用CODE(TEXT))或者VBA.ASC函数(VBA.ASC(CHAR))来返回字符的ASCII码,中文的ASCII码均<0,简体汉字的ASCII码为-2050~-20319之间。

以此句为例:"i see我明白了i quit"

如果我们找到"我"和"了"(两个中文字符),则可以在此替换为段落标记(或者其它如制表位等)和查找内容("^&"/"^q"---前者是不使用通配,后者是在使用通配符的情况下)

显然,在中文短语中直接查找中文首字和中文尾字,WORD是没有办法的,那么,如果我们查找的是以英文字符开头中间为任意汉字字符的并以英文字母结尾的文本项目(相当于"e我明白了i"),是一个WORD较易识别的标志,而且在每句中,是唯一的。

首尾英文字符好办,在样本文档中,均为小写字母,那么就是"[a-z]*[a-z]",中间为*通配符,零或多个任意字符,显然,WORD还是无法区分。

前面已经分析过了,样本文档中,只有五种字符,中文、英文字母、空格、段落标记和''(撇号),也就是中文字符只要为非另外的四种,就OK了,好,我们来试一下,注意查找使用通配符,"[a-z][!a-z, ,'']"(注:在"[!a-z, ,'']"中,逗号为分隔,也可以省略,为清晰起见,我此处写入了逗号.显然,WORD会将所有类似"e我"这样的文本项目找到,已经成功了,接下来,我们应该查找"了i"这样形式的文本项目,我们可以以"[!a-z, ,'',^13] [a-z]"来查找,显然,我们将段落标记也排除了.OK,我们已将可以将两者区分起来了.

方法一:

替换:第一步,我们不考虑直接替换为具有分隔标志的内容,因为我们还没有找到有效的方法前,我们可以替换格式的方法,先将它们区分出来,比如,在查找项目中,键入"[a-z][!a-z, ,'']",勾选通配符,在替换项目中,直接按下CTRL+B,则在替换项目文本框下方,会出现格式:字体:加粗,其它快捷键同WORD中,如CTRL+U(下划线),CTRL+I(斜体)等,WORD2000中可能不支持此快捷键,则可以在下方的格式中设置,此处略.全部替换,OK,168处.我们的目的是在中文(粗体字)前加入段落分隔符(或其它,此处以段落标志为例,下同),继续查找粗体的任意字母,替换为非粗体的格式,只要在查找中键入"^$"(如果是在通配符情况下,可以使用"[a-z]",光标在查找项目的文本框中,按下CTRL+B,使其为格式:字体:粗体;替换中,键入"^&^p"(即在查找内容后面加入段落标记,以分隔)按下CTRL+B,使其处于格式:字体:非粗体(如果切换为不限定格式,将会起到删除作用,即替换为""(空空),非粗体是将查找项目中的粗体文本转为非粗体).OK,168处,共2*168,第一次分离成功进行!

第二个分隔, 勾选通配符,查找"[!a-z, ,'',^13][a-z]",替换为粗体格式,同上,略,共2*126处

这样,我们通过二次分隔,二次查找与替换,累计为588处替换.

CTRL+A,全选,CTRL+B二次转为常规文本,SHIFT+F3.切换为句首字母大写,也可以格式/更改大小写/句首字母大写.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

能不能再简单一点?

能,我们先按下述方法,做一遍:

方法二:

勾选使用通配符,查找为不限定格式的"([a-z])([!a-z, ,''])",注意此处的两个()为表达式,它将我们要查找的内容,放入表格式中.替换为"\1^p\2",注意,前者表达式在替换为对应了"\1",而后者对应了"\2",如果我们反一下,则可以将两个查找的表达式在最后文本中交换位置,显然在替换中,我们在两个表达式之间加入了一个段落标记.OK,168处!

第二次分离,同理,查找"([!a-z, ,'',^13])([a-z])",替换为"\1^p\2",126处.

哇,我们通过这样两次查找与替换,即可以完成分离,294处!,比上一次操作减少了一半,294处!

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

能不能再简单一些?能!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-22 06:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
方法三:

请再跟我做一遍,查找:"^p",替换为"",即将所有段落标记删除.43处,注意,您此处不需要再勾选通配符!

为更精确些,请全选文档(CTRL+A),为什么,WORD中还是有些微妙区别的,有时包括在编程中,也存在类似问题,WORD可能会"失落"某些符合的项目,至少,在本过程中,您还是需要全选的.

勾选通配符,查找中键入"([a-z])([!^1-^127]*)([a-z,^13])",替换为:"\1^p\2^p\3",我们来分析一下,这个表达式的含义,查找的第一部分()为任意英文字母开头的,第二部分为非ASC码在1~127之间(纵观本文档,就是两种字符,一是中文字符,二是西文字符(注意,此处我用的是西文字符,而非英文字符),在文章开头,我们就分析了,中文字符正好符合这个判断条件,即"[!^1-^127]","*"的目的是零个或多个字符,此处相当于延伸了中文字符部分,第三部分,是任意字母或者为段落标记(段落标记^13针对全文档最后一个段落,也是最后一段落中英文短语).在替换中,"\1"代表的是"([a-z])","\2"代表的是"([!^1-^127]*)","\3"代表的是"([a-z,^13])",OK,168处.

如图:

显然,第三次的查找与替换,更为简洁,共211处!

如图:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

分离后的文档,您看上去就非常轻松.

如果我们接第三次的话,由于文档最后有两个空白段落标记,我们按下F8扩展,将光标定位到"要是"的"是"后面(即全文档最近第三个段落处),这样,我们需要的内容将被选定.

SHIFT+F3.切换为句首字母大写,也可以格式/更改大小写/句首字母大写.

表格/以段落标记(您也可以在上面的操作中换成您喜爱的符号)为分隔符,将文本转为四列的表格.选中第一列,用鼠标拖动到第二列时,两列文本将自动交换;同理,第三列与第四列也交换.

选中表格的第一第二列,表格/插入/列在左侧,插入二列.

进行编号:

有两种方法,但需要使用域.

第一种方法,在第一个单元格中,插入域{ListNum},选中该单元格,复制,选中第一二列,粘贴,如果你的编号项中有多余的修饰符,请替换掉.

第二种方法:选中第一列,插入/项目符号与编号/多级符号/自定义/高级,插入以123形式的不带特别标注的编号,复制,编辑/选择性粘贴/无格式文本,OK,编号转为文本了.

如图:

在第二列的第一个单元格中,插入域: { =SUM(LEFT)*2 },其意为左侧单元格和(其实就一个单元格)*2.选中该单元格,复制,选中该列,粘贴.ALT+F8,出现"宏"对话框,在宏位置中,选择WORD命令,注意,这是WORD命令,不是VBA,找到或者键入此命令:" UpdateFields",WORD将更新域,说明,由于在表格中,没有相应的命令来更新全部域,您也可以模拟打印的方式(虚拟打印,或者去掉打印机,来打印,以求彻底更新域).OK,编号出来了.

如图:

全选文档,CTRL+SHIFT+F9,转域转为文本(断开域链接),删除第一列,将光标定位于表格中,或者全选表格,表格属性,宽度,百分比,100%,OK,表格调整为页面宽度.

在表格第一行上方插入一行,输入相应文本,选中该行,表格/标题行重复.OK,全部完成.

参赛人员的一些分析:

asdf1001的方法,比较精巧,查找"([a-z, ,']{1,200})"替换为:"^t^&^t",替换处数最少,其编号也是用得非常好;但由于在文本转换为表格,和表格转换过程中次数太多,有不合理之处。另外的不足是{1,200}不是精确匹配,受英文短语字数影响较大,且为不定数,而{n,m}(n 到 m 个前一字符或表达式)中,n/m的最大值不能超过255;从本处情况看使用{n,}( 至少 n 个前一字符或表达式),也能达到同样的目的,同理,n的值不能超过255.同时我们要注意到,此法在WORD查找中,是比较费时的.

实例:以'勾选通配符,查找中键入"([a-z])([!^1-^127]*)([a-z,^13])",替换为:"\1^p\2^p\3"'和asdf1001两种方法用VBA进行计时比较 ,WORD用时分别为0.296875秒 2.375秒,也就是前者的效率更高.

hpw, konggs, sailorgg的方法,是比较传统的方法, sailorgg的公式域是比较正确的一个做法(我倾向),但辅助列中,没有必要使用Autonum域;Konggs后面的解法中,受我在OFFICEFANS回复贴的启发,此处不作评论.

sdbbsdbb的方法中,使用表达式,是一个比较好的方法,但整体过程效率偏低.

如意版主的方法中,使用了样式,(如意版主是样式/格式使用高手), 整个思路比较清晰.但选择所有实例是XP及以上版本中的新功能,有一定的局限性,以及新建了两个空白文档,效率显得不是太高.

fieldsun的方法很好,特别是公式的使用,更见功力(但我不肯定是否存在重复计算的问题,因为WORD在更新域过程中,始终引用了上一个域中的值).邮件合并的方法,也是一个非常不错思路.

注意,本案例中的表格的编号,我们提倡以域公式为主,假如我们的编号间隔在63以上,用表格中的项目符号与编号的方法,是不适宜的,WORD中表格的列数极限为63列.

好了,这次中英分离的总结结束了,您是否和我一样,收获颇丰啊?也许你还有更好更妙的方式,请告诉我和网友,我们一同分享知识和快乐!

通过这次竞赛,通过这次总结,我们越来越感到,WORD中的查找与替换,它的内涵也是非常精奥,掌握了它的技术与方法,会对我们今后的工作,有很大的帮助.

一些感慨:

记得先前,我们的英文引号替换http://club.excelhome.net/viewthread.php?tid=46624,长长的代码,现在,只要使用查找与替换的方法,即可轻松做到,比之代码运行,效率更高;

在WORD的查找中,还支持语言查找,查找/格式/语言/查找语言对话框.还是以本案例为例,我们可以注意到,状态栏右下方的语言显示,如果是西文,它会出现西文语言名称如"英语(美国),如果是中文,它会出现"中文(中国)"字样,也就是说,我们通过语言查找,也能分开,但在实际查找与替换中,有一定的问题,也许与您的语法检测有关.我在实际查找过程中,时而有效,时而无效,好象需要初始化似的(这个问题,我需要进一步探索,但应该是行得通的) ,但如果以以下代码运行查找与替换,则可以,有兴趣的您,不妨一试:

Sub Test() With ActiveDocument.Content.Find .ClearFormatting '.LanguageID = 1033 '英文 .LanguageID = 2052 '中文 .Format = True .Replacement.ClearFormatting .Replacement.Font.Color = wdColorBlue '兰色字体 .Execute Replace:=wdReplaceAll End With End Sub

附中英文分离总结WORD文档

[此贴子已经被作者于2005-7-22 6:02:40编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-24 10:42 | 显示全部楼层

补充:

关于查找与替换效率的研讨

还以是上文中的中英文案列为列,我们将其段落标记全部删除,以便作比较,我用VBA计时的方式,分别用七种方法(其时为六种),分别进行了5*7(6)的测试,结果如下:

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-7-24 10:37:03 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [ThisDocument-ThisDocument]^' '* -----------------------------

Option Explicit '测试机器:WIN2000+OFFICEXP 'CPU INTEL CELERON 534MHZ 'RAM:256M Sub TEST1() '以通配符*方式的查找与替换各五次,以下为耗时s,平均耗时1.5773438 '1.5625 ' 1.503906 ' 1.601563 ' 1.613281 ' 1.605469 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "([a-z])([!^1-^127]*)([a-z,^13])" .Replacement.Text = "\1^p\2^p\3" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub TEST2() '以通配符@方式的查找与替换各五次,以下为耗时s,平均1.6015628 ' 1.589844 ' 1.59375 ' 1.601563 ' 1.601563 ' 1.621094 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting .Replacement.ClearFormatting .Text = "([a-z])([!^1-^127]@)([a-z,^13])" .Replacement.Text = "\1^p\2^p\3" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub TEST3() '以通配符@方式的查找与替换各五次,以下为耗时s,平均耗时5.2992188 '5.234375 ' 5.375 ' 5.269531 ' 5.359375 ' 5.257813 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting .Text = "([ 'a-z]@)([!^1-^127])" .Replacement.Text = "^p\1^p\2" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub TEST4() '以通配符{n,m}方式的查找与替换各五次,以下为耗时s,平均耗时5.1156252 '5.167969 ' 5.15625 ' 5.148438 ' 4.964844 ' 5.140625 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting .Text = "([a-z, ,']{1,200})" .Replacement.Text = "^p\1^p" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub Test5() '以语言(目前仅限于VBA)方式的查找与替换各五次,以下为耗时s,平均耗时4.2867188 '4.246094 ' 4.296875 ' 4.277344 ' 4.328125 ' 4.285156 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting '.LanguageID = 1033 '英文 .LanguageID = 2052 '中文 .Format = True .Replacement.ClearFormatting .Replacement.Font.Bold = True .Execute Replace:=wdReplaceAll .ClearFormatting .Format = True .Font.Bold = True .Replacement.ClearFormatting .Replacement.Text = "^p^&^p" .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub Test6() '改进型TEST5 '以语言(目前仅限于VBA)方式的查找与替换各五次,以下为耗时s,平均耗时2.46875s '2.371094 ' 2.503906 ' 2.515625 ' 2.441406 ' 2.511719 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting '.LanguageID = 1033 '英文 .LanguageID = 2052 '中文 .Format = True .Replacement.ClearFormatting .Replacement.Text = "^p^&^p" .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '---------------------- Sub Test7() '以非(英文和空格\撇号)方式的查找与替换各五次,以下为耗时s,平均耗时3.4117188 '3.285156 ' 3.425781 ' 3.445313 ' 3.457031 ' 3.445313 Dim A As Single, B As Single A = Timer With ActiveDocument.Content.Find .ClearFormatting .Text = "([a-z])([!a-z, ,']*[!a-z, ,'])([a-z])" .Replacement.Text = "\1^p\2^p\3" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With B = Timer Debug.Print B - A End Sub '----------------------

从以上查找中,可以看出,即使是使用通配符,同样存在效率的高低问题,查找的精确性越高,WORD分离(查找)效率就越高;越是模糊查找,效率越低,不明的查找,甚至导致WORD进入查找的死循环。同样,对于表达式中,含义越精确,查找速度越高。

归纳一下,同样查找条件下,?>*>{n,m}>@

*的本质是零个或者多个字符串,其检测的结果是从前一个查找项开始到后一个查找项的任意中间项,均为*;而{n,m}{n}{n,}的运用,是一个循环过程,WORD重复循环查找要搜索的项目,"a{1,100}",WORD将搜索从a(1)~a(100)之间所有符合项;而@则是无法估计的项目数,相当于进入了一个未知循环数的查找.(类似于DO WHILE语句)

TA的精华主题

TA的得分主题

发表于 2005-7-24 13:04 | 显示全部楼层

哈哈,看了老大的分析,长着不少见识。

同时有一问题请教:在老大删除空段的程序中我用time a,time b ,然后c=b-a,用msgbox c.来得到程序运行的时间, 现在您用Debug.Print B - A 得到程序运行的时间,可这个打印不出来啊,看不见啊,我上面则可以看到,不知两者用区别啊?记得VB好像是打印在当前窗口的左上角。VBA我怎么没发现在什么地方?请老大指点!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-24 13:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

VBE中,按下CTRL+G,在立即窗口中,会有显示。(或者视图/立即窗口)

TIME是当前时间,返回一个指明当前系统时间的 Variant (Date);TIMER是返回一个 Single,代表从午夜开始到现在经过的秒数。更能有效反应程序运行时间。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-30 05:59 | 显示全部楼层

补充:

在WORD的插入符号中,有一个普通文本的CJK(CJK Unified Ideographs,C 指中国,J 指日本,K 指朝鲜)统一汉字子集,这是一个字符集合,始于“一”而止于“龥”,Unicode 2.0版中共20902个,通过它,WORD可以判断该字符是否是汉字。该字符也可以从开始菜单/程序/附件/系统工具/字符映射表中获得,当然,后者是WINDODWS的字符基础,决定了前者.

根据WORD查找通配符中[]原则,我们可以将字符集合纳入查找中,勾选通配符,查找项目中输入"[一-龥]",在突出显示所有在该范围内查找到的项目前勾选,点击查找全部,WORD将自动找到所有CJK统一汉字,而不在此序列(集合)中的字符,则不会被查找。

你可以可根据字符集进一步引申,或者任意指定某一升序范围中的字符集。 比如说查找标点符号,我们看一下符号中的广义标点集和CJK统一标点集,分别是"[‐-⁄]","[、-〩]",我们这里只是举例,告诉大家如何查找指定范围内任意单个字符.我们可以试着查找一下"[‐-⁄,、-〩]",当然,一部分中文标点不在此两个集合中,我们可以例举. 理论上说,中文简体字符GB2312的字符集是从CHR(-2050~-20319),即从"啊"开始到"齄"结束,共6763个汉字,但在实际查找中,如果以"[啊-齄]",则部分汉字将不被WORD识别,而如果从"[一-齄]"开始查找,也有部分汉字不被识别,如"齿,龚,龟"等等,换而言之,WORD中的查找汉字字符集,它的依据标准我认为还是以字符映射表为依据的CJK统一汉字字符集(插入/符号同). OK,请大家一起来补充.

TA的精华主题

TA的得分主题

发表于 2005-11-30 10:52 | 显示全部楼层

我又碰到一个小小的问题想请教大家:

如下边的中英文人名,我如何使用通配符将中英文名分开。我使用的通配符是这个:[a-z][!a-z, ],可是下面的第五行就不对了,请大家帮忙。

Roman Abramovich罗曼·阿布拉莫维奇

Madeline Albright马德琳·奥尔布奈特

Muhammad Ali穆罕默德·阿里

Kofi Annan科菲.安南

George H.W. Bush (Sr.) 乔治·赫伯特·沃克·布什

George W. Bush (Jr.) 乔治-W-布什

Basher Assad巴沙尔·阿萨德

Lloyd Axworthy劳德·阿克沃塞

TA的精华主题

TA的得分主题

发表于 2005-11-30 11:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助


老兄,这是老大的精典贴子,不要在此问题好吗?

[Word查找与替换]:中英文分离案例与总结

[Word查找与替换]:中英文分离案例与总结

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-11-30 11:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TO KONGGS:

无所谓的。如果有助于大家学习,何乐而不为呢?

KONGGS的查找方法很好。

我也另外提供一种方法,可以适宜于常规的也许一段落中有数个英中对照人名的情况,但要求英文名至少在四个字节以上。

CTRL+H,勾选通配符

查找:"([^1-^127]{4,})([!^1-^127])"

替换为:"\1^t\2"

然后你可以设置一下制表位的格式.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 12:39 , Processed in 0.045877 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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