用括号内的值替换值

Replace values with values within brackets

我提取了带有 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"

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

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

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

regex demo详情:

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