如何删除字符向量中的所有“软连字符”?

时间:2019-06-01 11:36:47

标签: r regex

我有一个很长的文档,该文档的每一行都作为.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 (Finanzministeri­um): 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", "")

0 个答案:

没有答案