word中使用正则表达式进行查找和替换
試一試!
本節中的步驟介紹了如何使用正則表達式轉置姓名。請記住,始終使用**“查找和替換”**對話框來運行您的正則表達式。同時請記住,如果表達式沒有按預期工作,你始終可以按下 CTRL + Z 來撤銷您的更改,然后嘗試其他表達式。
轉置姓名
| Doris Hartwig |
| Tamara Johnston |
| Daniel Shimshoni |
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mwXNR1cr-1589334269775)(http://officeimg.vo.msecnd.net/zh-cn/files/354/571/ZA010372137.gif)]
(<*>) (<*>)
*2, \1*
| Hartwig, Doris |
| Johnston, Tamara |
| Shimshoni, Daniel |
此時,您可能會想知道:如果您的姓名中有一部分或全部包含中間名首寫字母,該怎么做? 請參閱使用正則表達式中的第一個示例以了解更多信息。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L4eb2WZj-1589334269777)(http://officeimg.vo.msecnd.net/zh-cn/files/206/661/ZA010077668.gif)] 返回頁首
正則表達式的工作原理
從此處開始,請記住這條原則:文檔內容決定了您絕大多數(并非全部)正則表達式的設計。例如,在您之前使用的示例表格中,每個單元格都包含了兩個單詞。如果單元格包含兩個單詞和一個中間名首寫字母,您將使用不同的表達式。
讓我們由內而外檢查每個表達式:
在第一個表達式 (<*>) (<*>) 中:
- 星號 (*****) 會返回單詞中的全部文本。
- 小于和大于符號 (< >) 分別標記了每個單詞的開始和結束。它們確保搜索會返回單個單詞。
- 它們之間的括號和空格將單詞拆分成不同的組:(第一個單詞)(第二個單詞)。括號還指示了您希望搜索以何種順序處理每個表達式。
換而言之,該表達式說:“查找兩個單詞。”
在第二個表達式 \2, \1 中:
- 斜杠 (****) 與數字放在一起充當占位符。(您也可以使用斜杠來查找其他通配符。請參閱下一節以了解更多信息。)
- 第一個占位符后的逗號在兩個被轉置的姓名之間插入正確的標點符號。
換而言之,該表達式說:“寫入第二個單詞,添加逗號,寫入第一個單詞。”
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xPwYfmrL-1589334269778)(http://officeimg.vo.msecnd.net/zh-cn/files/206/661/ZA010077668.gif)] 返回頁首
要查找和替換的項目的通配符
可以使用通配符搜索文本。例如,可使用星號 () 通配符搜索字符串(例如,使用“sd”將找到“sad”和“started”)。
使用通配符查找和替換文本
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lr58uHWq-1589334269779)(http://officeimg.vo.msecnd.net/zh-cn/files/354/571/ZA010372137.gif)]
如果看不到**“使用通配符”復選框,請單擊“更多”**。
- 若要從列表中選擇通配符,請單擊**“特殊格式”,再單擊通配符,然后在“查找內容”**框中鍵入任何其他文本。要了解更多信息,請參閱可用的通配符表。
- 在**“查找內容”**框中直接鍵入通配符。要了解更多信息,請參閱“可用的通配符”表格。
若要取消正在執行的搜索,請按 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”。 |
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-y3Bu32NV-1589334269781)(http://officeimg.vo.msecnd.net/zh-cn/files/206/661/ZA010077668.gif)] 返回頁首
使用正則表達式
這些示例會向您展示一些在 Microsoft Word 中使用正則表達式的方法
示例 1:轉置帶中間名首寫字母的姓名
此示例使用通配符和字符代碼組合來轉置包含中間名首寫字母的姓名。如果您不熟悉字符代碼,請參閱“Word 幫助”主題查找和替換 Word 2010 文件中的文本和其他數據。
在操作過程中,請記住下列事實:
- 在對表格中的姓名使用此表達式時,您必須首先將該表格轉換成文本。
- 如果表格包含多個列,請將包含姓名的列復制到空白文檔中,然后在那里將它轉換成文本。
- 轉置姓名后,請將文本重新轉換成表格。然后您可以刪除原始列并使用您已更改的數據 替換它。
準備示例數據
Joshua Quentin Barnhill
Doris X. Hartwig
Tamara Y. Johnston
Daniel Shimshoni
您的表格應如下所示:
| Doris X. Hartwig |
| Tamara Y. Johnston |
| Daniel Shimshoni |
轉置帶首寫字母的姓名
(*) ([! ]@)^13
請確保在兩組括號之間和感嘆號之后輸入空格。如果您之前沒有看到 ^13 字符,我們會在下一節介紹它的作用。
\2, \1^p
Barnhill,Joshua Quentin
Hartwig,Doris X.
Johnston,Tamara Y.
Shimshoni,Daniel
將已更改的文本重新轉換為表格
會打開**“將文本轉換成表格”**對話框。
逐個查看表達式
讓我們從**“查找內容”**框中的表達式開始,逐個查看這些表達式,從而了解它們是如何工作的。
整個表達式會查找兩組模式:一個帶有中間名首寫字母(或中間名)的名和一個姓。(*) 會查找全部名。請注意,它后面有一個空格。
表達式的此部分與姓相匹配:
([! ]@)^13
感嘆號會排除括號中指定的任何字符。在此案例中,[! ] 代表“查找除空格外的全部信息”。它的作用是從姓前面剪裁掉空格。
@ 字符會查找前一個字符的一個或多個匹配項,因此,它的作用是確保刪除姓前面的全部空格。
我們需要知道姓的結尾處,因此我們還使用 ^13 字符來搜索每一行結尾處的段落標記。但是,由于我們不準備重新使用該段落標記,所以我們會用括號將所有其他的內容括起來。
您可以通過以下步驟來嘗試這一操作:將姓名再次復制到您的測試文檔中(請確保使用段落標記分隔它們),然后使用 ([! ]@)^13 在**“查找內容”**框中進行搜索。搜索會與每個姓相匹配。
因為搜索會在下一行的起始處重新開始,所以我們使用星號通配符 (*****) 來匹配此處到下一個姓的起始處之間的全部內容。
由于我們不準備在姓前面重新使用空格,我們使用括號來將它從兩組中排除:
(*) ([! ]@)^13
要點 請謹慎使用 ^13 字符代碼。通常,您可以 ^p 字符代碼來搜索段落標記。但是,無法在通配符搜索中使用該代碼。您需要替換為使用代碼 ^13。盡管無法在通配符搜索中使用 ^p 字符代碼,您應當在通配符替換操作中使用它。這是為什么? ^p 字符包含了格式信息,^13 字符則沒有。此外,您完全無法將樣式信息分配給 ^13 字符。在替換操作中錯誤使用 ^13 代碼會在實質上將您的文檔轉換成無法設置格式的文件。
“替換”表達式 (\2 \1) 會完成實際轉置。在**“替換為”框中,\2** 字符讓搜索首先寫入第二個模式,然后在該模式后添加逗號。\1^p 字符指定了寫入第一個模式的位置并讓搜索在該模式后寫入段落標記。
示例 2:轉置日期
您可以使用此處顯示的正則表達式來將歐洲格式的日期轉換為美國 格式的日期。
轉置日期
([0-9]{1,2})([dhnrst]{2}) (<[ADFJMNOS]*>) ([0-9]{4})
請確保在以下左括號和右括號之間插入空格: 2}) (<[ and *>) ([0.
\3 \1, \4
請確保在每個字符集之間插入空格。
搜索會將 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 中的區域設置會控制您使用的列表分隔符。如果您的區域設置將分號的使用指定為列表分隔符,則您必須使用分號,而非逗號。
要找出您的操作系統指定的列表分隔符,請執行以下操作:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QmJDt2yk-1589334269781)(http://officeimg.vo.msecnd.net/zh-cn/files/785/945/ZA079005000.gif)]Windows 7
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0NWnyuED-1589334269782)(http://officeimg.vo.msecnd.net/zh-cn/files/785/945/ZA079005000.gif)]Windows Vista
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MFcUFxv8-1589334269783)(http://officeimg.vo.msecnd.net/zh-cn/files/785/945/ZA079005000.gif)]Windows XP
示例 3:向稱呼添加句號,或從稱呼刪除句號
在某些國家,尊稱(Mr.、Mrs. 等)不包括句號。此示例為您展示了如何向尊稱添加句號,或從尊稱刪除句號。從現在開始,我們假定您知道如何使用**“查找和替換”**對話框。
此表達式會查找沒有句號的 Mr、Ms、Mrs 和 Dr:
<([DM][rs]{1,2})( )
請注意,表達式會使用另一個包含空格的模型。該空格將緊隨尊稱之后(如果那里沒有句號)。此表達式會添加句號:
\1.\2
要反向操作,請使用此表達式進行搜索:
<([DM][rs]{1,2})。
使用此表達式進行替換:
\1
示例 4:查找重復段落或行
在使用此表達式時,您可能希望首先對列表排序,以便將重復行相鄰放置。同樣的,您需要刪除全部空白段落標記。換言之,如果您使用空白段落來分隔文本塊,如下所示:
Joshua Quentin Barnhill?
?
Joshua Quentin Barnhill?
?
Doris X. Hartwig?
您需要刪除那些段落,如下所示:
Joshua Quentin Barnhill?
Joshua Quentin Barnhill?
Doris X. Hartwig?
您可以用自己喜歡的方法來刪除空白段落,但是,我們正在談論正則表達式,因此這里就有一個能夠查找兩個連續段落字符的方法。使用此表達式進行搜索(@ 字符會重復查找和替換操作并刪除全部多個空行):
(^13)\1@
使用此表達式替換結果:
^p
現在,我們來看看替換文本的方法。此表達式會查找兩個連續相同段落的任意序列:
(*^13)\1
此表達式還會匹配在段落中結束的較長文本重復項。例如,對以下列表運行該表達式:
Joshua Quentin Barnhill?
Doris X. Hartwig?
Joshua Quentin Barnhill?
Doris X. Hartwig?
Tamara Y. Johnston?
搜索會查找前四行,只有當總體模式更改時才會停止。與之相反,如果您對此列表運行該表達式:
Joshua Quentin Barnhill?
Joshua Quentin Barnhill
Doris X. Hartwig?
Doris X. Hartwig?
表達式會只查找前兩個段落。
要搜索更多的相同項目,請添加更多占位符。例如,此表達式會查找三個連續相同段落:
(*^13)\1\1
您還可以使用大括號來達到同樣的目的。以下示例會分別查找兩個和三個相同段落:
(*13){2}(*13){3}
或者,您可以查找兩個或三個相同段落:
(*^13){2,3}
您還可以查找兩個或更多相同段落:
(*^13){2,}
可以使用以下字符串替換這些表達式中的任意一個:
\1
此外,您可以在必要時重復查找和替換操作,以便替換您文檔中的全部重復段落,或者您可以添加 @ 通配符,讓表達式為您重復該操作:
(*^13)\1@
您還可以使用此方法來替換表格中的重復行。要做到這一點,請首先刪除合并的單元格,然后為表格排序以相鄰放置重復單元格。接著,請將您的表格轉換成文本。(在**“表格”菜單上,指向“轉換”,然后單擊“表格到文本”**;出現提示時,使用制表符分隔符。)完成替換后,請將文本重新轉換成表格。
更多示例
**
或者,您可以查找兩個或三個相同段落:
(*^13){2,3}
您還可以查找兩個或更多相同段落:
(*^13){2,}
可以使用以下字符串替換這些表達式中的任意一個:
\1
此外,您可以在必要時重復查找和替換操作,以便替換您文檔中的全部重復段落,或者您可以添加 @ 通配符,讓表達式為您重復該操作:
(*^13)\1@
您還可以使用此方法來替換表格中的重復行。要做到這一點,請首先刪除合并的單元格,然后為表格排序以相鄰放置重復單元格。接著,請將您的表格轉換成文本。(在**“表格”菜單上,指向“轉換”,然后單擊“表格到文本”**;出現提示時,使用制表符分隔符。)完成替換后,請將文本重新轉換成表格。
更多示例
要了解更多如何在 Word 中使用正則表達式的示例,請參閱 MVP FAQ 網站上的使用通配符查找和替換字符。
總結
以上是生活随笔為你收集整理的word中使用正则表达式进行查找和替换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙系统汽车中控,华为将推出车载智慧屏,
- 下一篇: 【源码】Viewer3D工具包