如何解决在 Red 语言中,如何使用 split 拆分字符串,但也将分隔符保留为 nessecary
我想用 split
分割一个字符串,同时该字符串包含用作分隔符的字符串,不应将其视为分隔符。我以这种方式尝试过,如下代码所示:
>> split {1 + 3 `to-string #"^(60)"`c} "`"
== ["1 + 3 " {to-string #"} {"} "c"] ;;I think it should be ["1 + 3 " {to-string #"^(60)"}"c"]
此处使用的 to-string #"^(60)"
是为了避免出现将被称为分隔符的“``”,但它失败了。似乎 ^(60)
被评估为“```”,然后被 split
用作分隔符。
那么,Red 语言中 split
的机制是什么?以及如何拆分字符串同时保留那些不应被视为分隔符的分隔符。
解决方法
^(60)
是所谓的 代码点表单,它作为 `
字符加载。
>> "^(60)"
== "`"
如果你想避免这种情况,你应该手动转义它:
>> {1 + 3 `to-string #"^^(60)"` c}
== {1 + 3 `to-string #"^^(60)"` c}
或者使用原始字符串:
>> %{1 + 3 `to-string #"^(60)"` c}%
== {1 + 3 `to-string #"^^(60)"` c}
split
事后处理很简单:
>> split %{1 + 3 `to-string #"^(60)"` c}% #"`"
== ["1 + 3 " {to-string #"^^(60)"} " c"]
如果你想在那里保留 `
字符,那么 split
不会剪掉它。你需要像 Parse 这样的东西:
>> string: {1 + 3 `to-string #"`"` c}
== {1 + 3 `to-string #"`"` c}
>> parse string [collect [keep to " `" " `" keep to "` " "` " keep copy match to end]]
== ["1 + 3" {to-string #"`"} "c"]
>> parse string [collect some [keep copy _ to copy match [" `" | "` " | end] match]]
== ["1 + 3" {to-string #"`"} "c"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。