我有一个很长的文档,该文档的每一行都作为.txt文件中的字符向量读入R中。
当使用paste0或带有“”的粘贴将这些向量中的两个向量粘贴在一起时,两个向量之间似乎引入了一个不可见的字符/符号,从而使其无法与正则表达式匹配。我尝试过[[:alpha:]],[[:upper:]],“ [[:lower:]],...-似乎没有任何作用。它完美匹配此“断点”之前和之后的字符
下面是一个正在发生的情况的示例-确实是最基本的,我不知道为什么它无法正确匹配。
part1 <- "stack"
part2 <- "overflow"
string <- paste0(part1, part2)
test1 <- str_detect(string, "stackoverflow")
test2 <- str_detect(string, "stack")
test3 <- str_detect(string, "overflow")
在我的情况下,test1的值为FALSE,test2和test3为TRUE。字符串的两个部分之间只有某物破坏了匹配。
有趣的是,如果我将联接的字符串复制并粘贴到正则表达式中(由于我正在寻找给定的模式,所以这不是我的代码的选择),尽管显示了完全相同的字符,它仍然可以工作。
这是怎么回事,可能会导致问题?
---更新---
因此,我遵循了一位评论员的建议(感谢Ben Bolker),并使用了charToRaw()。结果如下。
string <- "Staatsminister Dr. Markus Söder (Finanzministerium): Herr Präsident, meine sehr verehrten Damen und Herren! Heute ist schon ein besonderer Tag für die Zukunft des Freistaates Bayern,"
test <- charToRaw(string)
print(test)
[1] 53 74 61 61 74 73 6d 69 6e 69 73 74 65 72 20 44 72 2e 20 4d 61 72 6b 75 73 20 53 c3 b6 64 65 72 20 28 46 69 6e 61 6e 7a 6d 69 6e 69 73 74 65
[48] 72 69 c2 ad 75 6d 29 3a 20 48 65 72 72 20 50 72 c3 a4 73 69 64 65 6e 74 2c 20 6d 65 69 6e 65 20 73 65 68 72 20 76 65 72 65 68 72 74 65 6e 20
[95] 44 61 6d 65 6e 20 75 6e 64 20 48 65 72 72 65 6e 21 20 48 65 75 74 65 20 69 73 74 20 73 63 68 6f 6e 20 65 69 6e 20 62 65 73 6f 6e 64 65 72 65
[142] 72 20 54 61 67 20 66 c3 bc 72 20 64 69 65 20 5a 75 6b 75 6e 66 74 20 64 65 73 20 46 72 65 69 73 74 61 61 74 65 73 20 42 61 79 65 72 6e 2c
在上面的字符串中,神秘符号在第一个括号中的“ Finanzministeri”和“ um”之间。
我将其与我的输出进行了比较:
comparison <- "Finanzministerium"
comparison <- charToRaw(comparison)
print(comparison)
[1] 46 69 6e 61 6e 7a 6d 69 6e 69 73 74 65 72 69 75 6d
似乎在“ um”之前插入了位置50“ c2”和51“ ad”。据我了解,这是UTF-8中的“软连字符”(自从我调整了问题的标题以来)。
在合并两个字符向量之前,我将如何进行纠正?
---更新2 ---
想通了,谢谢您使我走上正轨!
string <- str_replace(string, "\\u00AD", "")