gpt4 book ai didi

r - 仅保留逗号后每个单词的第一个字母

转载 作者:行者123 更新时间:2023-12-02 02:19:31 24 4
gpt4 key购买 nike

我有类似 Sacher, Franz Xaver 的字符串或Nishikawa, Kiyoko .

使用R,我想将它们更改为Sacher, F. X.Nishikawa, K. .

换句话说,逗号后每个单词的第一个字母应保留一个点(如果后面有另一个单词,则保留一个空格)。

Here is a related response ,但它不能应用于我的情况 1:1,因为它的字符串中没有逗号;似乎简单地添加 (<?=, )不起作用。

例如在以下尝试中,gsub()取代了一切,而我的 str_replace_all() -尝试导致错误:

TEST <- c("Sacher, Franz Xaver", "Nishikawa, Kiyoko", "Al-Assam, Muhammad")

# first attempt
# (resembles the response from the other thread)
gsub('\\b(\\pL)\\pL{2,}|.','\\U\\1', TEST, perl = TRUE)

# second attempt
# error: "Incorrect unicode property"
stringr::str_replace_all(TEST, '(?<=, )\\b(\\pL)\\pL{2,}|.','\\U\\1')

我将非常感谢您的帮助!

最佳答案

你可以使用

gsub("(*UCP)^[^,]+(*SKIP)(*F)|\\b(\\p{L})\\p{L}*", "\\U\\1.", TEST, perl=TRUE)

请参阅regex demo详细信息:

  • (*UCP) - PCRE 动词,使 \b 识别 Unicode
  • ^[^,]+(*SKIP)(*F) - 字符串开头,然后是除逗号之外的任何零个或多个字符,然后匹配失败并跳过,下一场比赛从失败发生的位置开始
  • | - 或
  • \b - 字边界
  • (\p{L}) - 第 1 组:任何 Unicode 字母
  • \p{L}* - 零个或多个 Unicode 字母

请参阅R demo :

TEST <- c("Sacher, Franz Xaver", "Nishikawa, Kiyoko", "Al-Assam, Muhammad")
gsub("(*UCP)^[^,]+(*SKIP)(*F)|\\b(\\p{L})\\p{L}*", "\\U\\1.", TEST, perl=TRUE)
## => [1] "Sacher, F. X." "Nishikawa, K." "Al-Assam, M."

关于r - 仅保留逗号后每个单词的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66637508/

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