- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试解码以下字符串:
body = '{type:paragaph|class:red|content:[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]}'
body << '{type:image|class:grid|content:[id:1|title:image1][id:2|title:image2][id:3|title:image3]}'
我需要字符串在管道处拆分,而不是在管道包含方括号的地方拆分,为此我想我需要按照此处所述执行前瞻:How to split string by ',' unless ',' is within brackets using Regex?
我的尝试(仍然在每个管道处 split ):
x = self.body.scan(/\{(.*?)\}/).map {|m| m[0].split(/ *\|(?!\]) */)}
->
[
["type:paragaph", "class:red", "content:[class:intro", "body:This is the introduction paragraph.][body:This is the second paragraph.]"]
["type:image", "class:grid", "content:[id:1", "title:image1][id:2", "title:image2][id:3", "title:image3]"]
]
期待:
->
[
["type:paragaph", "class:red", "content:[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]"]
["type:image", "class:grid", "content:[id:1|title:image1][id:2|title:image2][id:3|title:image3]"]
]
有人知道这里需要的正则表达式吗?
是否可以匹配这个正则表达式?我似乎无法正确修改它Regular Expression to match underscores not surrounded by brackets?
我在这里修改了答案Split string in Ruby, ignoring contents of parentheses?得到:
self.body.scan(/\{(.*?)\}/).map {|m| m[0].split(/\|\s*(?=[^\[\]]*(?:\[|$))/)}
似乎可以解决问题。尽管我确定是否存在任何不足。
最佳答案
处理具有相同语法的嵌套结构会让事情变得困难。
您可以尝试递归下降解析器(Google 快速搜索 https://github.com/Ragmaanir/grammy - 不确定是否有用)
就个人而言,我会选择一些非常骇人听闻的东西 - 一些 gsubs 将您的字符串转换为 JSON,然后使用 JSON 解析器进行解析:-)。不过,这也不是特别容易,但这里有:
require 'json'
b1 = body.gsub(/([^\[\|\]\:\}\{]+)/,'"\1"').gsub(':[',':[{').gsub('][','},{').gsub(']','}]').gsub('}{','},{').gsub('|',',')
JSON.parse('[' + b1 + ']')
这并不容易,因为字符串格式显然使用 [foo:bar][baz:bam]
来表示哈希数组。如果您有机会修改序列化格式以使其更容易,我会接受。
关于除非包含在括号中,否则 Ruby 正则表达式先行在管道处拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15727562/
上周在.NET性能优化群里面有一个很有意思的讨论,讨论的问题如下所示: 请教大佬:2D数组,用C#先遍历行再遍历列,或者先遍历列再遍历行,两种方式在性能上有区别吗? 据我所知,
访问链接树的所有节点的最佳方法是什么(所有节点都引用父节点和所有子节点,根节点的父节点为 null),以便在其任何祖先之前都不会访问任何节点?非递归的布朗尼点数。 最佳答案 伪代码: NodesToV
我是一名优秀的程序员,十分优秀!