如何从这个:"{\n \"DNAHeader\": {},\n \"ItemsSaleable\": []\n}\n"
这是:"\"DNAHeader\":{},\"ItemsSaleable\":[]"
我有这个正则表达式作为启动器:"<OWSP>{<OWSP>"
对于终止符:"<OWSP>}<OWSP>"
其中<OWSP>
是可选白色,与Swift正则表达式中的\s*
相同。
我将它们转换为Swift的等价形式:
if let group = groupOrItem as? Group,
let initiator = group.typeSyntax?.initiator?.literal.literalValue?.replacingOccurrences(of: "<OWSP>", with: "\\s*"),
let terminator = group.typeSyntax?.terminator?.literal.literalValue?.replacingOccurrences(of: "<OWSP>", with: "\\s*")
{
let captureString = "(.*?)"
let regexString = initiator + captureString + terminator
let regexPattern = "#" + regexString + "#"
正则表达式模式如下所示:
(lldb) po regexString
"\\s*{\\s*(.*?)\\s*}\\s*"
问题,如何应用它,如何切断有意义的内在文本?我试过这个,
var childText = text.replacingOccurrences(of: regexPattern, with: "$1", options: .regularExpression).filter { !$0.isWhitespace }
但不删除启动器/终止器文本,如此处的{
和}
部分:
(lldb) po text
"{\n \"DNAHeader\": {},\n \"ItemsSaleable\": []\n}\n"
(lldb) po childText
"{\"DNAHeader\":{},\"ItemsSaleable\":[]}"
2条答案
按热度按时间iqxoj9l91#
正如在评论中所说的,您目前有JSON(但是您说不要关注它,但是...),这使得Regex的构建相当困难。
当我怀疑一个流,我创建假测试值,但它不是必要的情况:
"提取/查找"代码:
测试:
我使用
debugDescription
是为了在控制台中看到"\n"
。输出:
cidc1ykv2#
RegexBuilder
(适用于iOS 16和macOS 13),则以下代码有效(请参阅函数extracted()
):