【问题标题】:Regex \x96 -like characters正则表达式 \x96 -like 字符
【发布时间】:2013-01-30 12:42:46
【问题描述】:

我在一个包含字符的数据集中有一些字符串

\x96
\x92

和其他人。

我不知道如何在 R 中为它们 grep。
我试过使用

pattern="\x96"
pattern="\\x96"
pattern="x96"

但无济于事。

是否有处理此类字符的特定方法,特别是在 R 中。


** 更新 ** 根据 cmets 中的建议,perl=TRUE 允许 grep 工作

任何人都可以对正在发生的事情提供一个可靠的解释吗?

会话信息,以防万一

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C         LC_TIME=C            LC_COLLATE=C         LC_MONETARY=C        LC_MESSAGES=C        LC_PAPER=C           LC_NAME=C            LC_ADDRESS=C        
[10] LC_TELEPHONE=C       LC_MEASUREMENT=C     LC_IDENTIFICATION=C 

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_0.9.3    RMySQL_0.9-3     DBI_0.2-5        stringr_0.6.1    data.table_1.8.6

【问题讨论】:

  • 你能编辑你的标题吗?它似乎与您的实际问题无关。
  • @joran,感谢您指出这一点
  • 请给出一个重现您的问题的例子。 pattern <- "\x92"; grepl(pattern, "\x92") 有效,所以很难猜出你的情况有什么问题......
  • @joran -- 很奇怪。设置perl=TRUE 有什么不同吗? (FWIW,我的语言环境,来自 Sys.getlocale()English_United States.1252,我正在使用 Windows 机器。)
  • @RicardoSaporta 我经常遇到法语字符的同样问题。我之前通过在最初导入数据时设置字符编码解决了这个问题。 Windows-1252 是我想到的。有时我什至在导入数据之前在文本编辑器中转换字符编码。 Grep 很难找到它们,因为它们实际上不是\x96\x96 只是实际角色的表示。

标签: regex r special-characters


【解决方案1】:

R 支持几种不同类型的正则表达式。默认为 POSIX ERE(扩展正则表达式),这是 grep 和其他标准 posix 工具中的默认值。但是 R 中的 POSIX ERE 引擎目前不支持转义十六进制字符代码:

用反斜杠转义非元字符取决于实现。当前实现将 \a 解释为 BEL,\e 解释为 ESC,\f 解释为 FF,\n 解释为 LF,\r 解释为 CR,\t 解释为 TAB。 (请注意,这些将由 R 的解析器以文字字符串的形式解释。)

Regular Expressions as used in R

设置 perl=TRUE 会将 R 用于处理正则表达式的引擎更改为 PCRE(perl 兼容的正则表达式)。 PCRE 支持转义的十六进制字符代码——瞧,你的正则表达式现在可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多