And*_*ews 3 unicode grep r gsub
我试图在由字符串组成的数据框中标识唯一的unicode值。我尝试使用grep函数,但是遇到以下错误
Error: '\U' used without hex digits in character string starting ""\U"
Run Code Online (Sandbox Code Playgroud)
数据框示例
time sender message
1 2012-12-04 13:40:00 1 Hello handsome!
2 2012-12-04 13:40:08 1 \U0001f618
3 2012-12-04 14:39:24 1 \U0001f603
4 2012-12-04 16:04:25 2 <image omitted>
73 2012-12-05 06:02:17 1 Haha not white and blue... White with blue eyes \U0001f61c
40619 2015-05-08 10:00:58 1 \U0001f631\U0001f637
grep("\U", dat$messages)
Run Code Online (Sandbox Code Playgroud)
数据
dat <-
structure(list(time = c("2012-12-04 13:40:00", "2012-12-04 13:40:08",
"2012-12-04 14:39:24", "2012-12-04 16:04:25", "2012-12-05 06:02:17",
"2015-05-08 10:00:58"), sender = c(1L, 1L, 1L, 2L, 1L, 1L), message = c("Hello handsome!",
"\U0001f618", "\U0001f603", "<image omitted>", "Haha not white and blue... White with blue eyes \U0001f61c",
"\U0001f631\U0001f637")), .Names = c("time", "sender", "message"
), class = "data.frame", row.names = c("1", "2", "3", "4", "73",
"40619"))
Run Code Online (Sandbox Code Playgroud)
我假设“ unicode字符”是指非ASCII字符。字符编码根据编码可能具有不同的含义。R用特殊\U序列表示当前编码之外的值。请注意,斜杠和字母“ U”实际上都不会出现在实际数据中。当没有适当的字形时,这就是将它们转义以显示在屏幕上的方式。
例如,即使最后一条消息看起来很长,但实际上只有两个字符
dat$message[6]
# [1] "\U0001f631\U0001f637"
nchar(dat$message[6])
# [1] 2
Run Code Online (Sandbox Code Playgroud)
您可以很容易地使用正则表达式查找非ASCII代码。ASCII字符均具有代码0-128(或八进制的000至177)。您可以使用以下方法找到该范围之外的值
grep("[^\001-\177]", dat$message)
# [1] 2 3 5 6
Run Code Online (Sandbox Code Playgroud)
尝试:
library(stringi)
stri_enc_isascii(dat$message)
Run Code Online (Sandbox Code Playgroud)
这使:
# [1] TRUE FALSE FALSE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1412 次 |
| 最近记录: |