我需要拆分+
符号上的一大块文本,但仅当它在单引号之外时。文本看起来像是:
Some.data:'some+value'+some.more.data:9+yet.more.data:'rock+roll'
它应该成为三个值的切片:
- Some.data:'some +value'
- some.more.data:9
- yet.more.data:'rock +roll'
我有found similar questions that do it using regex,但这需要向前看,而golang正则表达式引擎没有。
我还尝试了在没有lookahead的情况下创建自己的正则表达式:
'.*?'(\+)|[^']*(\+)
但这似乎在第三个项目上崩溃了,它在+
上分裂成'rock+roll'
。
我曾经考虑过在+
上做一个字符串拆分,然后验证每个切片以确保它不是一个部分表达式,然后如果是,将这些片段拼接回一起,但这将相当复杂,如果可能的话,我想避免它。
目前,我认为最好的解决方案是识别引号内的文本(我可以用正则表达式轻松地做到这一点),要么对该文本进行URL编码,要么对加号做其他事情,拆分文本,然后URL解码表达式以获得引号内的+
符号,但我想知道是否有更好的方法。
有没有人知道如何使用regex * 在不带 * lookahead的情况下对引号外的+
符号进行拆分?有人能想到比我的URL编码/解码方法更简单的解决方案吗?
2条答案
按热度按时间kgqe7b3p1#
简单的代码可能更容易:
flvlnr442#
这个问题有点老了,但您可以考虑使用go-andiamo/splitter。
示例:
try on go-playground
披露:我是go-andiamo/splitter的作者