Swift 正則表示式匹配提取


在Swift中,您可以使用Foundation框架提供的NSRegularExpression類提取正則表示式匹配項。Swift的NSRegularExpression是處理Swift中正則表示式的強大工具,可用於各種文字處理任務。

NSRegularExpression 類

您可以使用名為NSRegularExpression的Swift Foundation框架類來使用正則表示式。藉助正則表示式,您可以搜尋和替換文字,以及建立定義字串集合的模式。

您可以使用NSRegularExpression將字串模式轉換為正則表示式物件,然後可以使用該物件查詢並開始處理與該模式匹配的字串。

以下是NSRegularExpression的一些關鍵特性

  • 建立正則表示式物件 − 可以使用init(pattern:options:)初始化器透過提供字串模式作為引數來建立NSRegularExpression物件。正則表示式由稱為模式的字串描述。

  • 查詢匹配項 − 建立NSRegularExpression物件後,可以使用matches(in:options:range:)函式在字串中查詢匹配項。此函式返回一個NSTextCheckingResult物件的陣列,詳細說明每個匹配項的範圍。

  • 獲取匹配子字串 − 您可以使用Range和String類來獲取與正則表示式匹配的確切子字串。可以使用Range類根據指定字元範圍建立自定義字串。此類定義字串中字元的範圍。

  • 替換匹配子字串 − 您可以使用

    stringByReplacingMatches(in:options:range:withTemplate:)方法將指定的子字串替換為替換字串。替換字串可以包含引用匹配子字串的特殊替換模式。

示例1:從字串中查詢所有具有特定長度的單詞

  • 步驟1 − 建立一個包含要搜尋文字的字串作為輸入,模式是一個正則表示式,它匹配包含恰好五個字母的任何單詞。

  • 步驟2 − 使用try?運算子使用給定模式建立NSRegularExpression物件,如果失敗,則返回nil。

  • 步驟3 − 然後使用NSRegularExpression類的matches(in:range:)方法查詢輸入字串中的所有匹配項。

  • 步驟4 − 執行一個迴圈,使用Range和String類提取匹配的子字串。

  • 步驟5 − matchStrings陣列將包含與正則表示式模式匹配的所有子字串。

import Foundation
let inputString = "The quick brown fox jumps over the lazy dog."
let pattern = "\b\w{5}\b"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }
   print("Input string: \(inputString)")
   print("Match strings: \(matchStrings)")
}

輸出

Input string: The quick brown fox jumps over the lazy dog.
Match strings: ["quick", "brown", "jumps"]

示例2:從字串中查詢電子郵件地址

  • 步驟1 − 建立一個包含要搜尋文字的字串作為輸入。模式是一個正則表示式,它匹配所有電子郵件地址。

  • 步驟2 − 使用try?運算子使用給定模式建立NSRegularExpression物件,如果失敗,則返回nil。

  • 步驟3 − 然後使用NSRegularExpression類的matches(in:range:)方法查詢輸入字串中的所有匹配項。

  • 步驟4 − 執行一個迴圈,使用Range和String類提取匹配的子字串。

  • 步驟5 − matchStrings陣列將包含與正則表示式模式匹配的所有子字串。

import Foundation
let inputString = "Contact us at info@example.com or support@example.org"
let pattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }    
   print("Input string: \(inputString)")
   print("Match strings: \(matchStrings)")
}

輸出

Input string: Contact us at info@example.com or support@example.org
Match strings: ["info@example.com", "support@example.org"]

此示例演示如何使用正則表示式從字串中提取所有電子郵件地址。使用的模式是[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, 它匹配任何具有電子郵件地址格式的字串。此模式匹配@符號之前的任何字母數字字元、點、下劃線、加號和連字元,後跟可以包含點和連字元的域名,最後以至少兩個字母的頂級域名結尾。

示例3:從字串中提取所有電話號碼

  • 步驟1 − 建立一個包含要搜尋文字的字串作為輸入。模式是一個正則表示式,它匹配所有電話號碼。

  • 步驟2 − 使用try?運算子使用給定模式建立NSRegularExpression物件,如果失敗,則返回nil。

  • 步驟3 − 然後使用NSRegularExpression類的matches(in:range:)方法查詢輸入字串中的所有匹配項。

  • 步驟4 − 執行一個迴圈,使用Range和String類提取匹配的子字串。

  • 步驟5 − matchStrings陣列將包含與正則表示式模式匹配的所有子字串。

import Foundation
let inputString = "Call us at (123) 456-7890 or (555) 123-4567"
let pattern = "\(\d{3}\) \d{3}-\d{4}"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }
    
   print("Input string: \(inputString)")
   print("Match strings: \(matchStrings)")
}

輸出

Input string: Call us at (123) 456-7890 or (555) 123-4567
Match strings: ["(123) 456-7890", "(555) 123-4567"]

此示例演示如何使用正則表示式從字串中提取所有電話號碼。使用的模式是\(\d{3}\) \d{3}-\d{4}, 它匹配任何具有電話號碼格式的字串。此模式匹配任何以左括號開頭、後跟三個數字、然後是右括號、空格、三個數字、連字元,最後是四個數字的字串。

結論

在Swift中,正則表示式是處理文字的有效工具。您可以使用Foundation框架提供的NSRegularExpression類建立和編輯正則表示式。正則表示式可用於查詢和替換文字、提取匹配子字串和驗證輸入等任務。透過學習正則表示式,您可以大大提高使用Swift處理文字的熟練程度,並在程式設計方面取得進步。

更新於:2023年4月25日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.