【问题标题】:Replace values with values within brackets用括号内的值替换值
【发布时间】:2021-01-16 19:20:29
【问题描述】:

我提取了带有 twitch 彩带名称的数据集的第一列。一些主播的拉丁用户名在括号中。

"TheRealKnossi"
"TheGrefg"
"YoDa"
"Pestily"
"<U+D55C><U+B3D9><U+C219> (handongsuk)"
"GamesDoneQuick"
"<U+8001><U+76AE> (mobilmobil)"

我想用括号内的值替换原始值:

"TheRealKnossi"
"TheGrefg"
"YoDa"
"Pestily"
"handongsuk"
"GamesDoneQuick"
"mobilmobil"

我尝试使用 gsub()

gsub("(?<=\\()[^()]*(?=\\))(*SKIP)(*F)|.", "", channels, perl=T)

问题在于它适用于所有向量元素:

""
""
""
""
"handongsuk"
""
"mobilmobil"

【问题讨论】:

  • gsub("^.*\\((.*)\\).*$", "\\1", channels)

标签: r gsub


【解决方案1】:

您的问题是 (?&lt;=\()[^()]*(?=\))(*SKIP)(*F) 匹配最里面的圆括号(括号)之间的子字符串,不包括括号本身,并跳过匹配,然后 . 匹配任何字符(但换行符,因为您使用的是代码中的 PCRE 正则表达式),因此 gsub 删除了那些字符,但括号中的子字符串。

您可以使用 TRE 正则表达式 sub 解决方案,例如

sub(".*\\(([^()]*)\\).*", "\\1", channels)

请参阅regex demo详情

  • .* - 任何零个或多个字符,尽可能多
  • \( - 一个 ( 字符
  • ([^()]*) - 第 1 组 (\1):除 () 之外的任何零个或多个字符
  • \) - 一个 ) 字符
  • .* - 任何零个或多个字符,尽可能多。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多