gpt4 book ai didi

r - 如何替换两个标点之间的单词

转载 作者:行者123 更新时间:2023-12-03 19:01:36 26 4
gpt4 key购买 nike

我有一个如下所示的数据集

sentence <-  
"active ingredients: avobenzone, octocrylene, octyl salicylate.
other stuff inactive ingredients: water, glycerin, edta."

我正试图得到
    "avobenzone, octocrylene, octyl salicylate, water, glycerin, edta."

我用简单英语思考的逻辑是匹配标点符号和分号之间的任何内容以删除它们。或者,在字符串开头和分号之间匹配并删除它们。我在 r 中使用 gsub 并且到目前为止已经到了这里:
     gsub("([:punct:][^:]*:)|^([^:]*:)", "", sentence)

但我的结果是这样的......
    [1] " avobe water, glycerin, edta."

为什么这会捕获第一个单词到最后一个分号而不是第一个单词之间的所有内容?有人可以指出我正确的方向来理解这个逻辑吗?

谢谢!

最佳答案

至少一种方式是:

gsub(".*?:\\s*(.*?)\\.", "\\1, ", sentence)
[1] "avobenzone, octocrylene, octyl salicylate, water, glycerin, edta, "
注意 ?在 .* 之后,这使得匹配不贪婪。没有 ?, .* 尽可能匹配。
添加:
这样做的想法是用空替换除了您想要的部分之外的所有内容。你说你想在标点符号处停下来,但你显然不想在逗号处停下来,所以我冒昧地将问题解释为找到冒号和句号之间的刺痛部分。在我的表达中, .*?:匹配直到第一个冒号的所有内容。我输入\\s* 还可以去掉冒号后面的任何空格。从那以后,我们想要一切,直到下一个时期。这由 .*?\\表示。但是我们想保留那部分,所以我把它放在括号里,使它成为一个“捕获组”。因为它在括号中,冒号和句点之间的任何内容都将存储在名为\1 的变量中(但您必须键入\\1 才能获得字符串\1)。我还在捕获组的末尾添加了“,”(逗号空白),以帮助将其与接下来的任何内容分开。所以这将需要 active ingredients: avobenzone, octocrylene, octyl salicylate.并将其替换为 avobenzone, octocrylene, octyl salicylate, .由于我使用了 gsub(全局替换),它会重新开始并尝试对字符串的其余部分执行相同的操作,替换 other stuff inactive ingredients: water, glycerin, edta.water, glycerin, edta, .对丑陋的尾随“,”感到抱歉。

关于r - 如何替换两个标点之间的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com