Swift 使用正则表达式在字符串中查找多个带引号的单词

Swift 使用正则表达式在字符串中查找多个带引号的单词,swift,regex,nsattributedstring,nsregularexpression,Swift,Regex,Nsattributedstring,Nsregularexpression,我的应用程序支持5种语言。我有一个字符串,其中有一些双引号。此字符串在localizable.strings文件中被翻译成5种语言 例如: title_identifier = "Hi \"how\", are \"you\""; 我想通过查找这些单词的范围,在这个字符串中加粗“how”和“you”。因此,我试图从字符串中提取这些被引用的单词,结果将是一个包含“how”和“you”或它们的范围的数组 func matches(for regex: String, in text: String

我的应用程序支持5种语言。我有一个字符串,其中有一些双引号。此字符串在localizable.strings文件中被翻译成5种语言

例如:

title_identifier = "Hi \"how\", are \"you\"";
我想通过查找这些单词的范围,在这个字符串中加粗“how”和“you”。因此,我试图从字符串中提取这些被引用的单词,结果将是一个包含“how”和“you”或它们的范围的数组

func matches(for regex: String, in text: String) -> [String] {
  do {
        let regex = try NSRegularExpression(pattern: regex)
        let results = regex.matches(in: text,
                                    range: NSRange(text.startIndex..., in: text))
        return results.map {
            String(text[Range($0.range, in: text)!])
        }
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

matches(for: "(?<=\")[^\"]*(?=\")", in: str)
func匹配(对于regex:String,在text:String中)->[String]{
做{
让regex=尝试NSRegularExpression(模式:regex)
让results=regex.matches(在:text中,
范围:NSRange(text.startIndex…,in:text))
返回results.map{
字符串(文本[Range($0.Range,in:text)!)
}
}捕捉错误{
打印(“无效的正则表达式:\(错误.localizedDescription)”)
返回[]
}
}

匹配(例如:(?您的问题在于使用不使用文本但检查其模式是否匹配并返回true或false的lookarounds。请参阅,
)是匹配的,因为最后一个
在上一个匹配中没有使用,regex索引保留在
w
之后,因此下一个匹配可以从
开始。您需要在这里使用一个使用模式,
”([^“]*)”

但是,您的代码将只返回完全匹配。您可以在此处使用
.map{$0.trimmingCharacters(in:[“\”])}
修剪第一个和最后一个
,因为正则表达式只匹配开头和结尾的一个引号:

matches(for: "\"[^\"]*\"", in: str).map {$0.trimmingCharacters(in: ["\""])}
这是你的电话号码

或者,通过在
$0之后追加
(at:1)
来访问组1的值。范围

func matches(for regex: String, in text: String) -> [String] {
  do {
        let regex = try NSRegularExpression(pattern: regex)
        let results = regex.matches(in: text,
                                    range: NSRange(text.startIndex..., in: text))
        return results.map {
            String(text[Range($0.range(at: 1), in: text)!])
        }
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

let str = "Hi \"how\", are \"you\""
print(matches(for: "\"([^\"]*)\"", in: str))
// => ["how", "you"]

@wiktor stribiżew您提出的重复问题不一样。主要问题是使用Swift语言语法来找到正确的正则表达式,并在任何其他语言中使用转义引号。它是相同的正则表达式。只需将其作为有效的Swift字符串文本放入代码中。在链接帖子中有许多有效的解决方案,请参阅,。您有什么在Swift代码中表达or有问题吗?这也已经被问过了。不,我的字符串只是这样:
var str=“他们说”没问题“,”嗯“不是吗?”
。主要问题是我必须向Swift类提供正则表达式模式:
NSRegularExpression*regex=[NSRegularExpression regular expressionwithpattern:@“\\b(a | b)(c | d)\\b”选项:nsregularexpressioncase不敏感错误:&error];
我尝试放入其中的任何正则表达式,都会返回一个语法错误
匹配(对于“\”([^\“]*)\”,在“Hi\”中\“,是\'you\”)。映射{$0.trimmingCharacters(in:[“\”])}
将完成此任务