ios - 删除 Swift 中两个特定分隔符之间的字符,处理嵌套结果

标签 ios regex swift range

我有一个字符串,我想去掉两个特定字符之间的所有内容。例如给定 "hello {there} world" 我想删除 {} 之间的所有内容,包括那些分隔符,以获得 “ Hello World ”。它需要处理该模式有任意数量的嵌套结果的场景。例如 “hello {there {mr} } world and {all} those who inhabit it” 应该变成 “hello world and those who inhabit it”

它似乎需要找到最里面的结果并向外工作以防止删除不正确的范围。例如,如果它只是找到第一个 { 和第一个 },它将生成 hello world and those who inhabit it,这是不正确的。如果它要删除第一个 { 和最后一个 } 之间的所有内容,它将删除不应删除的内容并导致 "hello those谁居住其中”

那么如何实现呢?

可以使用 rangeOfString API 获取字符串的第一次出现,并使用这些范围通过 stringByReplacingCharactersInRange 删除字符,或者可以使用正则表达式模式。我不确定如何最好地利用这些来获得必要的行为。

最佳答案

一个简单的计数算法应该可以工作:

  • 为结果准备一个空字符串
  • 将计数器初始化为零
  • 一次一个地遍历输入字符串的字符
  • 当字符是左大括号时,增加计数器
  • 当字符是右大括号时,递减计数器
  • 对于所有其他字符,请检查计数器。如果为零,则将字符复制到输出中;否则,跳过字符

这是一个示例实现:

let s = "hello {there {mr} } world and {all} those who inhabit it"
var res = ""
var count = 0
for c in s {
    switch c {
    case "{": count++; break;
    case "}": count--; break;
    default:
        if count == 0 {
            res += String(c)
        }
        break;
    }
}
println(res)

修改它以确保 count 永远不会低于零,以确保大括号在输入中是平衡的。

关于ios - 删除 Swift 中两个特定分隔符之间的字符,处理嵌套结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803671/

相关文章:

ios - 无法在 iOS 9 beta/9.3 上更改 WKWebView 的滚动率

javascript - 正则表达式不工作

ios - 从 post 请求中检索 header 值

ios - UIScrollView 页面宽度不等于 self.view 宽度

ios - 如何在 Swift 4 中使用未知服务器数据类型在对象映射器中属性?

javascript - 使用 jquery mobile 定位链接

Java 正则表达式错误 - 使用组引用进行向后查找

javascript - 正则表达式匹配以特定字符串开头并以特定字符串结尾的字符串内容

ios - 如何使用 SDWebImage 从缓存中提取旧的 UIImage 并将其放入占位符?

objective-c - 当设置为 'initial view controller' 与使用presentModalViewController 加载时, View Controller 的行为有所不同