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

5号

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

例:

title_identifier = "Hi \"how\", are \"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)

结果是:["how", ", are ", "you"]而不是["how","you"]我认为此正则表达式需要一些补充,以便一旦找到两个引号就可以搜索下一个引号,从而避免引号之间的单词。

维克多·史翠比维

您的问题是使用了不消耗文本但要检查其模式是否匹配并返回truefalse的环顾四周查看运行中的正则表达式,进行, are 匹配,因为"前一个匹配中的最后一个未被消耗,正则表达式索引w紧随其后,因此下一个匹配可以以开头"您需要使用消耗这里模式,"([^"]*)"

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

matches(for: "\"[^\"]*\"", in: str).map {$0.trimmingCharacters(in: ["\""])}

这是正则表达式演示

可替换地,访问组1个值通过追加(at: 1)$0.range

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"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式查找带引号的字符串中的所有大括号

如何使用正则表达式查找带引号的字符串

如何使用正则表达式(Python)从字符串中查找多个单词?

查找格式错误的带引号的字符串的正则表达式

正则表达式查找带引号的字母的字符串

使用正则表达式,提取可能包含嵌套引号的带引号的字符串

使用正则表达式捕获不带引号的双引号内的字符串

正则表达式用_(Sublime)替换带引号的字符串中的空格

无法在ruby中使用正则表达式突出显示带引号的字符串

使用正则表达式python在字符串中的等号后查找单引号

正则表达式检索带引号的字符串和引号字符

如何使用正则表达式在字符串中查找单词

使用正则表达式模式lua在字符串中查找单词

八度-使用正则表达式查找字符串中的单词

正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

PHP棘手的正则表达式获取带引号的字符串直到某些单词

正则表达式解析带引号的子字符串的查询,并返回单个单词的嵌套列表

如何使用正则表达式匹配字符串中的多个单词?

正则表达式-用开始和结束引号替换带引号的字符串

Java正则表达式,用于将带引号的字符串与转义的引号匹配

正则表达式匹配忽略双引号的带引号的字符串

正则表达式搜索字符串中带双引号的单词

正则表达式:使用“或”正则表达式从字符串中删除多个单词会删除一些单词,但不能全部删除

Golang正则表达式替换不包括带引号的字符串

Haskell,正则表达式,TDFA:匹配(并删除)带引号的子字符串

PHP 正则表达式提取带引号和括号的子字符串

使用Perl正则表达式替换引号封装字符串中的引号

如何使用正则表达式匹配单引号或双引号中的字符串

使用正则表达式查找并替换字符串中的第二个反引号