word中使⽤正则表达式进⾏查和替换
试⼀试!
本节中的步骤介绍了如何使⽤正则表达式转置姓名。请记住,始终使⽤**“查和替换”**对话框来运⾏您的正则表达式。同时请记住,如果表达式没有按预期⼯作,你始终可以按下 CTRL + Z 来撤销您的更改,然后尝试其他表达式。
转置姓名
1. 启动 Word,然后打开⼀个新的空⽩⽂档。
2. 复制此表格,将它粘贴到该⽂档中。
Josh Barnhill
Doris Hartwig
Tamara Johnston
Daniel Shimshoni
1. 在**“开始”选项卡上的“编辑”组中,单击“替换”以打开“查和替换”**对话框。
1. 如果您没有看到**“使⽤通配符”复选框,请单击“更多”**,然后选中该复选框。如果您没有选中该复选框,Word 会将通配符视作
⽂本。
2. 在**“查内容”**框中键⼊以下字符。请确保您在两组括号之间包含了空格:
(<*>) (<*>)
1. 在**“替换为”**框中,键⼊以下字符。请确保您在逗号和第⼆个斜杠之间包含了空格:
*2, \1*
1. 选择该表格,然后单击**“全部替换”**。Word 会转置这些姓名并使⽤逗号分隔它们,如下所⽰:
Barnhill, Josh
Hartwig, Doris
Johnston, Tamara
Shimshoni, Daniel
此时,您可能会想知道:如果您的姓名中有⼀部分或全部包含中间名⾸写字母,该怎么做? 请参阅使⽤正则表达式中的第⼀个⽰例以了解更多信息。
正则表达式的⼯作原理
从此处开始,请记住这条原则:⽂档内容决定了您绝⼤多数(并⾮全部)正则表达式的设计。例如,在您之前使⽤的⽰例表格中,每个单元格都包含了两个单词。如果单元格包含两个单词和⼀个中间名⾸写字母,您将使⽤不同的表达式。
让我们由内⽽外检查每个表达式:
在第⼀个表达式 (<*>) (<*>) 中:
星号 (*****) 会返回单词中的全部⽂本。
⼩于和⼤于符号 (< >) 分别标记了每个单词的开始和结束。它们确保搜索会返回单个单词。
它们之间的括号和空格将单词拆分成不同的组:(第⼀个单词)(第⼆个单词)。括号还指⽰了您希望搜索以何种顺序处理每个表达式。
换⽽⾔之,该表达式说:“查两个单词。”
在第⼆个表达式 \2, \1 中:
斜杠 (****) 与数字放在⼀起充当占位符。(您也可以使⽤斜杠来查其他通配符。请参阅下⼀节以了解更多信息。)
第⼀个占位符后的逗号在两个被转置的姓名之间插⼊正确的标点符号。
换⽽⾔之,该表达式说:“写⼊第⼆个单词,添加逗号,写⼊第⼀个单词。”
要查和替换的项⽬的通配符
可以使⽤通配符搜索⽂本。例如,可使⽤星号 () 通配符搜索字符串(例如,使⽤“s d”将到“sad”和“started”)。
使⽤通配符查和替换⽂本
1. 在**“开始”选项卡上的“编辑”组中,单击“查”旁边的箭头,然后单击“⾼级查”**。
1. 选中**“使⽤通配符”**复选框。
如果看不到**“使⽤通配符”复选框,请单击“更多”**。
1. 请执⾏下列操作之⼀:
2.
1. 若要从列表中选择通配符,请单击**“特殊格式”,再单击通配符,然后在“查内容”**框中键⼊任何其他⽂本。要了解更多
信息,请参阅表。
2. 在**“查内容”**框中直接键⼊通配符。要了解更多信息,请参阅表格。
3. 如果要替换该项⽬,请单击**“替换”选项卡,然后在“替换为”**框中键⼊要⽤作替换的内容。
4. 单击**“查下⼀处”、“查全部”、“替换”或“全部替换”**。
若要取消正在执⾏的搜索,请按 Esc。
可⽤的通配符
注释
选中**“使⽤通配符”复选框后,Word 将只查与指定的内容精确匹配的⽂本。请注意,“区分⼤⼩写”和“全字匹配”**复选框将不可⽤(灰显),以表⽰这些选项已⾃动开启。您⽆法关闭这些选项。
若要搜索已被定义为通配符的字符,请在该字符前⾯键⼊⼀个反斜杠 (****)。例如,键⼊ ? 来查问号。
可使⽤括号对通配符和⽂本进⾏分组,以指明处理顺序。例如,键⼊ <(pre)*(ed)> 可以到“预排序的”和“已阻⽌的”。
可使⽤ \n 通配符搜索表达式,然后将其替换为经过重新排列的表达式。例如,在**“查内容”框中键⼊ (Ashton) (Chris),并在“替换为”**框中键⼊ \2 \1。Word 将到 Ashton Chris 并将其替换为 Chris Ashton。
⽤于查类型⽰例
任⼀字符?s?t 可到“sat”和“set”。
任何字符串*****s*d 可到“sad”和“started”。
单词开头<<(inter) 可到“interesting”和“intercept”,但不到“splintered”。
单词结尾>(in)> 可到“in”和“within”,但不到“interesting”。
⽤于查类型⽰例
正则表达式获取括号内容指定字符之⼀[ ]w[io]n 可到“win”和“won”。
此范围内的任⼀字符[-][r-t]ight 可到“right”和“sight”。范围必须是升序。
除了括号内范围中的字符之外的任⼀字符[!x-z]t[!a-m]ck 可到“tock”和“tuck”,但不到“tack”或“tick”。
前⼀个字符或表达式的 n 个匹配项{n}fe{2}d 可到“feed”,但不到“fed”。
前⼀个字符或表达式的⾄少 n 个匹配项{n,}fe{1,}d 可到“fed”和“feed”。
前⼀个字符或表达式的 n 到 m 个匹配项{n,m}10{1,3} 可到“10”、“100”和“1000”。
前⼀个字符或表达式的⼀个或多个匹配项@lo@t 可到“lot”和“loot”。
使⽤正则表达式
这些⽰例会向您展⽰⼀些在 Microsoft Word 中使⽤正则表达式的⽅法
⽰例 1:转置带中间名⾸写字母的姓名
此⽰例使⽤通配符和字符代码组合来转置包含中间名⾸写字母的姓名。如果您不熟悉字符代码,请参阅“Word 帮助”主题。
在操作过程中,请记住下列事实:
在对表格中的姓名使⽤此表达式时,您必须⾸先将该表格转换成⽂本。
如果表格包含多个列,请将包含姓名的列复制到空⽩⽂档中,然后在那⾥将它转换成⽂本。
转置姓名后,请将⽂本重新转换成表格。然后您可以删除原始列并使⽤您已更改的数据 替换它。
准备⽰例数据
1. 如果您还没完成这⼀步,请启动 Word 并创建⼀个新的空⽩⽂档。
2. 将空⽩表格插⼊到该⽂档中。将表格设为宽⼀列⾼四⾏。
3. 逐个复制这些姓名,并将每个姓名粘贴到空⽩表格单元格中:
Joshua Quentin Barnhill
Doris X. Hartwig
Tamara Y. Johnston
Daniel Shimshoni
您的表格应如下所⽰:
Joshua Quentin Barnhill
Doris X. Hartwig
Tamara Y. Johnston
Daniel Shimshoni
1. 选择该表格,然后在**“表格⼯具布局”选项卡上的“数据”组中,单击“转换成⽂本”**。
2. 选择**“段落标记”作为⽂本分隔符,然后单击“确定”**。
转置带⾸写字母的姓名
1. 在**“开始”选项卡上的“编辑”组中,单击“替换”以打开“查和替换”**对话框。
2. 选中**“使⽤通配符”复选框(您可能需要单击“更多”以查看该复选框),然后在“查内容”**框中键⼊以下表达式:(*) ([! ]@)^13
请确保在两组括号之间和感叹号之后输⼊空格。如果您之前没有看到 ^13 字符,我们会在下⼀节介绍它的作⽤。
1. 在**“替换为”**框中,键⼊以下表达式:
\2, \1^p
1. 选择姓名列表,然后单击**“全部替换”**。Word 会转置这些姓名以及中间名⾸写字母或中间名,如下所⽰:
Barnhill,Joshua Quentin
Hartwig,Doris X.
Johnston,Tamara Y.
Shimshoni,Daniel
将已更改的⽂本重新转换为表格
1. 请选择已转置的姓名列表。
2. 在**“插⼊”选项卡上的“表格”组中,单击“表格”,然后单击“将⽂本转换成表格”**。
会打开**“将⽂本转换成表格”**对话框。
1. 在**“⽂字分隔位置”下,单击“段落”,然后单击“确定”**。
逐个查看表达式
让我们从**“查内容”**框中的表达式开始,逐个查看这些表达式,从⽽了解它们是如何⼯作的。
整个表达式会查两组模式:⼀个带有中间名⾸写字母(或中间名)的名和⼀个姓。(*) 会查全部名。请注意,它后⾯有⼀个空格。
表达式的此部分与姓相匹配:
([! ]@)^13
感叹号会排除括号中指定的任何字符。在此案例中,[! ] 代表“查除空格外的全部信息”。它的作⽤是从姓前⾯剪裁掉空格。
@ 字符会查前⼀个字符的⼀个或多个匹配项,因此,它的作⽤是确保删除姓前⾯的全部空格。
我们需要知道姓的结尾处,因此我们还使⽤ ^13 字符来搜索每⼀⾏结尾处的段落标记。但是,由于我们不准备重新使⽤该段落标记,所以我们会⽤括号将所有其他的内容括起来。
您可以通过以下步骤来尝试这⼀操作:将姓名再次复制到您的测试⽂档中(请确保使⽤段落标记分隔它们),然后使⽤ ([! ]@)^13 在
**“查内容”**框中进⾏搜索。搜索会与每个姓相匹配。
因为搜索会在下⼀⾏的起始处重新开始,所以我们使⽤星号通配符 (*****) 来匹配此处到下⼀个姓的起始处之间的全部内容。
由于我们不准备在姓前⾯重新使⽤空格,我们使⽤括号来将它从两组中排除:
(*) ([! ]@)^13
要点 请谨慎使⽤ ^13 字符代码。通常,您可以 ^p 字符代码来搜索段落标记。但是,⽆法在通配符搜索中使⽤该代码。您需要替换为使⽤代码 ^13。尽管⽆法在通配符搜索中使⽤ ^p 字符代码,您应当在通配符替换操作中使⽤它。这是为什么? ^p 字符包含了格式信息,^13字符则没有。此外,您完全⽆法将样式信息分配给 ^13 字符。在替换操作中错误使⽤ ^13 代码会在实质上将您的⽂档转换成⽆法设置格式的⽂件。
“替换”表达式 (\2 \1) 会完成实际转置。在**“替换为”框中,\2** 字符让搜索⾸先写⼊第⼆个模式,然后在该模式后添加逗号。\1^p 字符指定了写⼊第⼀个模式的位置并让搜索在该模式后写⼊段落标记。
⽰例 2:转置⽇期
您可以使⽤此处显⽰的正则表达式来将欧洲格式的⽇期转换为 格式的⽇期。
转置⽇期
1. 复制以下⽇期并粘贴到您的⽂档中:28th May 2003
2. 打开**“查和替换”对话框,然后在“查内容”**框中键⼊以下表达式:
([0-9]{1,2})([dhnrst]{2}) (<[ADFJMNOS]*>) ([0-9]{4})
请确保在以下左括号和右括号之间插⼊空格: 2}) (<[ and *>) ([0.
1. 在**“替换为”**框中输⼊以下表达式:
\3 \1, \4
请确保在每个字符集之间插⼊空格。
1. 单击**“全部替换”**。
搜索会将 28th May, 2003 替换为 May 28, 2003。
逐个查看表达式
让我们从**“查内容”**框中的表达式开始。该表达式的作⽤是将⽇期分解为四个部分,由多组括号来表⽰。每个模式都包含您在全部⽇期(以您在⽰例中使⽤的样式书写)中查的组件。按从左到右的顺序:
数字范围 [0-9] 匹配第⼀个模式中的⼀位数数字。因为⽇期可以由两个数字组成,我们让搜索返回⼀位数或两位数的⽇期:{1,2}。结果为第⼀个模式:([0-9]{1,2})。
序数词组成了第⼆个模式。序数词包含“th”、“nd”、“st”和“rd”,因此我们将这些字母添加到范围 [dhnrst] 中。因为序数词总是由两个字母组成,我们将字母计数限制为 2:([dhnrst]{2})。
接下来是空格,之后是查⽉份名的⽂本字符和通配符。所有⽉份名都以这些⼤写字母开头:ADFJMNOS。我们不知道每个⼤写字母后有多少个字符,因此我们在它们之后使⽤星号 (*)。我们只对⽉份名本⾝感兴趣,因此我们使⽤⼤于和⼩于字符来将结果限制为单个单词。结果为第四个模式:(<[ADFJMNOS]*>)。
最后,我们搜索年。我们使⽤相同的数字范围,但这次我们将计数限制为四个字符 ([0-9]{4})。
请注意,我们在**“替换为”框中只写⼊四个地址模式中的三个。我们从⽇期中省略了序数词 (“th”),因为美国格式的⽇期 不使⽤序数词。如果您想在⽇期中保留序数词,请在“替换为”**框中输⼊ \3 \1\2, \4。在本例中,您在 3 和逗号之后都输⼊了空格,其他地⽅则没有。
此时,您可能要问:如何处理没有拼写⽉份名的⽇期?例如, 28/05/03。使⽤此表达式搜索:
([0-9]{1,2})/([0-9]{1,2})/([0-9]{2})
使⽤此表达式替换:
\3/\1/\2
如果⽇期使⽤的格式为 28/05/2003,则在最后⼀个模式中使⽤ {4},⽽⾮ {2}。
关于在正则表达式中使⽤列表分隔符
上⾯的例⼦使⽤以下参数来查⼀位数或两位数⽇期:{1,2}。在本例中,逗号将两个值分隔开。但是请记住,您在 Windows 中的区域设置会控制您使⽤的列表分隔符。如果您的区域设置将分号的使⽤指定为列表分隔符,则您必须使⽤分号,⽽⾮逗号。
要出您的操作系统指定的列表分隔符,请执⾏以下操作:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论