Swift 使用正则表达式在字符串中查找多个带引号的单词
我的应用程序支持5种语言。我有一个字符串,其中有一些双引号。此字符串在localizable.strings文件中被翻译成5种语言 例如: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
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:[“\”])}
将完成此任务