R未检测到字符串中的\ x模式

时间:2019-06-13 15:50:11

标签: r stringr

有人知道如何检测并替换</td><tr><td width=50><a class="btn-success" href="invoiced_read.php?id=12">Read</a> <td>00000</td><td>Svc</td><td>12/13/18</td><td>CHICAGO, IL</td><td>123</td><td></td><td>Y</td><td>Employee-name</td><td>Invoiced</td><td>12<td width=250> <input type="checkbox" name="check_list[]" value="12" </td> </tbody> </table> </div> You have selected the following 2 option(s): <br/>location_num = 11111<br>row_id = 481<br>-----------<br>location_num = 06704<br>row_id = 480<br>-----------<br><br/><b>Note :</b> <span>action if values shown.</span> "123" "8" "11111" "Street Address" "City-Name" "State" "Bob-firstname" "Smith-last-name" "2019-04-10" "S" "3" "SHAMWOW" "15.00" "1500" "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vel erat cursus, porttitor augue non, dapibus turpis. In commodo facilisis velit, blandit condimentum magna laoreet at. Duis quis gravida erat. Fusce commodo suscipit eros eget condimentum. Donec libero purus, varius vulputate sem at, convallis ultricies dui. Vivamus nec egestas ex. Mauris faucibus nisl nisl, ac accumsan ipsum mattis quis. Sed quis augue a sapien sodales iaculis vel sed diam. Suspendisse ut nunc in erat cursus interdum. Vestibulum laoreet gravida felis et sagittis. Aliquam sollicitudin feugiat odio ac consectetur. Morbi iaculis turpis nisi, ut feugiat dui vestibulum ac. Aliquam ultrices enim sapien, vitae ultrices nulla iaculis sit amet. Curabitur quis nisl arcu. Maecenas elementum imperdiet tincidunt. Nullam sodales dui ut ornare tincidunt. Maecenas vitae urna ullamcorper, hendrerit mi nec, feugiat ex. Phasellus placerat mauris eget enim commodo, quis faucibus ex sollicitudin. Sed eget pharetra nibh" "Y" "0.00" "0.00" "0.00" "0.00" "0.00" "99" "N" "N" "N" </form> 中的“ \ x”吗?

R

会话信息:

library(stringr)
x <- "gesh\xfc"
str_detect(x, "\\x")
# Error in stri_detect_regex(string, pattern, negate = negate, opts_regex = opts(pattern)) : 
# Unrecognized backslash escape sequence in pattern. (U_REGEX_BAD_ESCAPE_SEQUENCE)

nchar(x)
# Error in nchar(x) : invalid multibyte string, element 1

iconv(x, "latin1", "utf-8")
# [1] "geshü"
Encoding(x)
# [1] "unknown"

上下文:我读了一个> sessionInfo() R version 3.6.0 (2019-04-26) Platform: x86_64-apple-darwin15.6.0 (64-bit) Running under: macOS High Sierra 10.13.6 ... locale: [1] fr_CH.UTF-8/fr_CH.UTF-8/fr_CH.UTF-8/C/fr_CH.UTF-8/fr_CH.UTF-8 的.csv文件,但该文件的德语同名字母是ä,ö,ü等。一旦在R中读取,这些字母将转换为以data.table::fread()开头的字母。这很简单,之后就无法在R中使用。

1 个答案:

答案 0 :(得分:2)

只是总结一下这里发生的事情。 “ \ x”不是字符串的一部分。这就是R逃逸否则无法打印的值的方式。在“ gesh \ xfc”的情况下,前4个字符是基本ASCII字符,但最后一个编码的字符是“ \ xfc”。在latin1编码(Windows默认使用)中,fc字符是“ü”字符。因此,在Windows计算机中,我看到了

x <- "gesh\xfc"
x
# [1] "geshü"

您可以使用以下命令查看该字符串的原始字节

charToRaw("gesh\xfc")
# [1] 67 65 73 68 fc

您可以看到前四个值的ASCII十六进制字符代码,然后您可以看到\x实际上只是用于在字符串中包括“ fc”字符代码。字符串本身只有5个“字符”。

但是,如果您不使用latin1,则“ fc”字符不会映射到任何内容。基本上,该字符串在utf-8编码中没有任何意义,这是Mac默认情况下使用的编码。您可以使用

转换为utf-8
iconv("gesh\xfc", "latin1", "utf-8")

但是由于您是通过导入文本文件获得此文件的,所以问题在于R并不知道文件的编码不是UTF-8,因此您会遇到这些怪异的值。您应该告诉fread该文件来自Windows,以便它可以从头开始正确导入字符串

fread(file, encoding = "Latin-1")

您需要知道使用哪种编码来制作要导入的文件,尤其是当别人进行编码时。程序实际上不可能正确猜测。