我试图使用正则表达式替换字符串中出现的所有英国汽车注册.

当字符串与下面的正则表达式完全匹配时,下面的swift代码非常适用于.

var myString = "DD11 AAA"
var stringlength = countElements(myString) 
var ierror: NSError?
var regex:NSRegularExpression = NSRegularExpression(pattern: "^([A-HK-PRSVWY][A-HJ-PR-Y])\\s?([0][2-9]|[1-9][0-9])\\s?[A-HJ-PR-Z]{3}$", options: NSRegularExpressionOptions.CaseInsensitive, error: &ierror)!
var modString = regex.stringByReplacingMatchesInString(myString, options: nil, range: NSMakeRange(0, stringlength), withTemplate: "XX")
print(modString)

结果是XX

但是,以下操作不起作用,且字符串未被修改

var myString = "my car reg 1 - DD11 AAA  my car reg 2 - AA22 BBB"
var stringlength = countElements(myString) 
var ierror: NSError?
var regex:NSRegularExpression = NSRegularExpression(pattern: "^([A-HK-PRSVWY][A-HJ-PR-Y])\\s?([0][2-9]|[1-9][0-9])\\s?[A-HJ-PR-Z]{3}$", options: NSRegularExpressionOptions.CaseInsensitive, error: &ierror)!
var modString = regex.stringByReplacingMatchesInString(myString, options: nil, range: NSMakeRange(0, stringlength), withTemplate: "XX")
print(modString)

结果是my car reg 1 - DD11 AAA my car reg 2 - AA22 BBB

有人能给我一些建议吗?

推荐答案

你需要移除^$个锚.

^表示start of string$表示end of string(或直线,取决于选项).这就是为什么您的第一个示例有效:在第一个测试字符串中,字符串的开头紧跟着您的模式,并以它结束.

在第二个测试字符串中,模式出现在字符串的中间,因此^...不能apply.如果您只删除^$将应用于第二次出现的注册号,输出将为my car reg 1 - DD11 AAA my car reg 2 - XX.

let myString = "my car reg 1 - DD11 AAA  my car reg 2 - AA22 BBB"
let regex = try! NSRegularExpression(pattern: "([A-HK-PRSVWY][A-HJ-PR-Y])\\s?([0][2-9]|[1-9][0-9])\\s?[A-HJ-PR-Z]{3}", options: NSRegularExpression.Options.caseInsensitive)
let range = NSMakeRange(0, myString.count)
let modString = regex.stringByReplacingMatches(in: myString, options: [], range: range, withTemplate: "XX")
print(modString)
// Output: "my car reg 1 - XX  my car reg 2 - XX"

Swift相关问答推荐

WWDC Swift并发会话中的厨房服务示例令人困惑

如何让CTFontCreateUIFontForLanguage与汉字和表情包协同工作?

在解码字符串时需要帮助.

通过SwiftUI中的列表 Select 从字典中检索值

Swift C外部实现的Task / Future类类型

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

如果通过计时器循环运行,则检索CPU利用率百分比的SWIFT脚本运行良好.似乎在没有计时器的情况下停留在初始百分比上

MacOS 13-如何使用SwiftUI创建Message.App设置工具栏?

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

应该在ViewModel还是ViewController中使用"Task {}"?

如何在 Swift 中做类型安全的索引?

从 actor 的 init 方法调用方法

Swift // Sprite Kit:类别位掩码限制

快速递归:函数与闭包

如何为 Swift UI 视图定义 struct ?

Apple 的自然语言 API 返回意外结果

Swift 函数 vs 惰性变量 vs 计算(computed)属性 - 区别?

如何在 SwiftUI 中以编程方式滚动列表?

在 Swift 中以编程方式更新约束的常量属性?

更改在变量的 willSet 块中设置的值