gpt4 book ai didi

r - 如何在句子中添加删除的空格?

转载 作者:行者123 更新时间:2023-12-04 10:44:05 24 4
gpt4 key购买 nike

我有以下字符串:

x = "marchTextIWantToDisplayWithSpacesmarch"

我想删除字符串开头的“march”部分,然后在其余部分的每个大写字母前添加一个空格以产生以下结果:
"Text I Want To Display With Spacesmarch"

为了插入空白,我使用了 gsub("([a-z]?)([A-Z])", "\\1 \\2", x, perl= T) 但我不知道如何修改模式,以便从返回的字符串中排除第一个 'march'。我正在努力在这方面做得更好,因此将不胜感激任何帮助。

最佳答案

不,您无法使用单个 gsub 实现替换,因为在您的一个要求中,您希望从头开始删除所有小写字母,而您的第二个要求是在每个大写字母之前引入一个空格,除了第一个大写字母从文本开头删除所有小写字母后的结果字符串。

在我们可以以某种方式重新使用一些现有字符来进行条件替换的情况下,在单个 gsub 调用中进行操作是可能的,而这里不可能出现这种情况。因此,在第一步中,您可以使用 ^[a-z]+ regex 仅从字符串的开头删除所有小写字母,

sub('^[a-z]+', '', "marchTextIWantToDisplayWithSpacesmarch")

留给你这个,
[1] "TextIWantToDisplayWithSpacesmarch"

下一步,您可以使用此 (?<!^)(?=[A-Z]) 正则表达式在除第一个大写字母之外的每个大写字母之前插入一个空格,因为您可能不希望在句子前有额外的空格。但是你可以把两者结合起来写成这样,
gsub('(?<!^)(?=[A-Z])', ' ', sub('^[a-z]+', '', "marchTextIWantToDisplayWithSpacesmarch"), perl=TRUE)

这会给你你想要的字符串,
[1] "Text I Want To Display With Spacesmarch"

编辑: (?<!^)(?=[A-Z]) 模式说明

首先,让我们以 (?=[A-Z]) 模式为例,

See the pink markers in this demo

如您所见,在演示中,每个大写字母前面都有一个粉红色标记,这是插入空格的位置。但是我们不希望在第一个字母之前插入空格,因为这是不需要的。因此我们需要在正则表达式中设置一个条件,它不会选择出现在字符串开头的第一个大写字母。为此,我们需要在 (?<!^) 后面使用否定查找,这意味着 不要选择字符串开头 之前的位置,因此这个 (?<!^) 有助于丢弃字符串开头之前的大写字母。

See this demo where the pink marker is gone from the very first uppercase letter

希望这可以澄清如何选择每个其他大写字母,但不是第一个。如果您有任何疑问,请告诉我。

关于r - 如何在句子中添加删除的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070527/

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