Swift 提取 Regex 匹配

Swift 提取 Regex 匹配

在 Swift 中,您可以使用 Foundation 框架提供的 NSRegularExpression 类提取 Regex 匹配。Swift 的 NSRegularExpression 是在 Swift 中处理正则表达式的强大工具,可用于广泛的文本处理任务。

NSRegularExpression 类

您可以使用 Swift Foundation 框架类 NSRegularExpression 利用正则表达式。借助正则表达式,您可以搜索和替换文本,并创建定义字符串集合的模式。

您可以使用 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 − 匹配字符串数组将包含与正则表达式模式相匹配的所有子字符串。

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 − 匹配字符串数组将包含与正则表达式模式相匹配的所有子字符串。

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 − 匹配字符串数组将包含与正则表达式模式相匹配的所有子字符串。

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中处理文本的能力并成为一名高级程序员。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Swift 教程