【问题标题】:Searching a backslash in a string received from external source在从外部源接收的字符串中搜索反斜杠
【发布时间】:2016-01-17 11:20:30
【问题描述】:

我有一个从我的数据库收到的字符串,所以在 R 中它看起来像:

a <- c("www", "x", "yes", "\303\243")

> a
[1] "www" "x"   "yes" "ã" 

我想做的是找出哪些元素中有反斜杠。 我试过了:

grepl('\\',a[4])

但我不断收到错误

正则表达式'\'无效,原因是'尾随反斜杠'

无论我使用cat 还是fixed=T

如何在列表中找到反斜杠?

【问题讨论】:

  • a[4] => [1] "ã" : R直接将\303和\243解释为对应的符号
  • 也许Encoding(a) == "latin1" ?
  • 有趣,你不能搜索那个字符。 as.integer(charToRaw("\\")); grepl("\092", a, useBytes=TRUE, fixed=TRUE) 是一个错误。
  • 简单的事实是a 的任何元素中都没有反斜杠。考虑这个字符串:"Hello World!\n"。你觉得里面有反斜杠吗?此外,如果您想在带有grep 的字符串中查找反斜杠,您应该:grepl("\\\\",a[4]),当然是FALSE

标签: r string backslash


【解决方案1】:

您需要对反斜杠进行两次转义,一次用于 R 中的字符串文字,一次用于正则表达式。 grepl("\\", a[4]) 应用正则表达式 \,而 grepl("\\\\", a[4]) 应用正则表达式 \\。要查看转义的字符串文字,您可以使用cat("\\")

但我认为您的字符串根本不包含任何反斜杠,因为在定义中,反斜杠出现在转义序列中,而不是作为字符本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2015-03-28
    • 2018-03-21
    相关资源
    最近更新 更多