gpt4 book ai didi

regex - 如何在 Swift 字符串中只搜索整个单词

转载 作者:搜寻专家 更新时间:2023-11-01 05:50:09 24 4
gpt4 key购买 nike

我有这个 NS 搜索表达式。 searchString 传入一个字符串,我想在 baseString 中搜索它并突出显示。但是目前,如果我搜索单词“I”,例如“hide”中的“i”会突出显示.

我已经看到我可以使用 \b 来只搜索整个单词,但我看不到我将它添加到表达式中的位置。这样只有整个单词会被突出显示。

另一个例子是,如果我的 baseString 包含“他的故事已成为历史”,并且我使用 searchString 搜索“他的”,它将突出显示 他的保守党。

let regex = try! NSRegularExpression(pattern: searchString as! String,options: .caseInsensitive)

for match in regex.matches(in: baseString!, options: NSRegularExpression.MatchingOptions(), range: NSRange(location: 0, length: (baseString?.characters.count)!)) as [NSTextCheckingResult] {
attributed.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellow, range: match.range)
}

最佳答案

您可以从 searchString 轻松创建正则表达式模式:

let baseString = "His story is history"
let searchString = "his" //This needs to be a single word
let attributed = NSMutableAttributedString(string: baseString)

//Create a regex pattern matching with word boundaries
let searchPattern = "\\b"+NSRegularExpression.escapedPattern(for: searchString)+"\\b"

let regex = try! NSRegularExpression(pattern: searchPattern, options: .caseInsensitive)

for match in regex.matches(in: baseString, range: NSRange(0..<baseString.utf16.count)) {
attributed.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellow, range: match.range)
}

一些评论:

  • 假设 baseStringsearchString 是上面代码中的非 Optional String,如果不是,请尽快将它们设为这样可能,在搜索之前。

  • 空的 OptionSet 由 [] 表示,因此您代码中的 options: NSRegularExpression.MatchingOptions() 可以简化为 option: [] ,它是matches方法的options:参数的默认值,无需指定。

  • NSRegularExpression 根据字符串的 UTF-16 表示获取和返回范围。您不应使用 characters.count 来制作 NSRange,而应使用 utf16.count

  • matches(in:range:) 的返回类型声明为[NSTextCheckingResult],您无需强制转换它。

关于regex - 如何在 Swift 字符串中只搜索整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com