用括号内的值替换值
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>(
和 )
之外的任何零个或多个字符
\)
- 一个 )
字符
.*
- 任意零个或多个字符,尽可能多。
我提取了带有 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>(
和)
之外的任何零个或多个字符
\)
- 一个)
字符.*
- 任意零个或多个字符,尽可能多。