【发布时间】:2021-10-13 10:23:48
【问题描述】:
我正在尝试根据特定模式拆分字符串。我有数据嵌套在大括号中。我想要做的是在双花括号处拆分字符串。我已经想出了如何在数据框中使用“分离”来做到这一点,但为了将来参考,我很想知道为什么这不起作用。
我在下面提供了一个关于单个字符串的示例:
pattern_test<-"[^\\}{2,2}]*\\}{2,2}"
teststring <- "{the {dog} is {hot}},{the {cat} is {lazy}}"
tmp<-unlist(str_extract_all(teststring, pattern_test))
tmp
tmp 计算结果为 ("hot}}", "lazy}}")。
换句话说,我在“pattern_test”中尝试做的是定义一个包含所有不完全是“}}”的字符的类:[^\\}{2,2}],并在该类中找到尽可能多的字符:* ,后跟“}}”(方括号外:\\}{2,2})。我怀疑我犯了一个基本错误,但我在网上找到的大多数示例都没有帮助我弄清楚错误是什么。我想要 tmp 评估的是:
("{the {dog} is {hot}}", ",{the {cat} is {lazy}}")。为什么子串在左括号处被截断?
【问题讨论】:
-
你为什么不能简单地在
,拆分? -
我无法回答你的问题,但我会尝试像
"\\{.*?\\}{2}"这样的模式。 -
感谢@MartinGal,您的解决方案有效。为了回答您的问题,我创建了一个更简单的示例,其中拆分“,”会起作用。它不适用于我的真实数据。您介意向我解释一下您的模式在做什么吗?
-
这事会查找
{,然后是}},并提取其间的所有内容。.*?是“非贪婪的”,所以它不会尽可能多地占用。如果没有?,这将返回整个字符串,因为最后一个字符也是}}。不是一个很好的解释,但我希望这个想法很清楚。 -
考虑接受 Wiktor Stribiżew 的回答。