这个空白隐藏在哪里?

Ari*_*man 6 regex r

我有一个字符向量,它是一些PDF抓取文件pdftotext(命令行工具).

一切都(幸福地)很好地排成一列.但是,向量中充斥着一种空格,这些空格使我的正则表达式无效:

> test
[1] "Address:"              "Clinic Information:"   "Store "                "351 South Washburn"    "Aurora Quick Care"    
[6] "Info"                  "St. Oshkosh, WI 54904" "Phone: 920?232?0718"   "Pewaukee"  

> grepl("[0-9]+ [A-Za-z ]+",test)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

> dput(test)
c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
"Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920?232?0718", 
"Pewaukee")

> test.pasted <- c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
+                  "Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920?232?0718", 
+                  "Pewaukee")

> grepl("[0-9]+ [A-Za-z ]+",test.pasted)
[1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

> Encoding(test)
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown"

> Encoding(test.pasted)
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "UTF-8"   "unknown"
Run Code Online (Sandbox Code Playgroud)

显然,有一些字符未被分配dput,如下面的问题:

如何正确地输入国际化文本?

我无法复制/粘贴整个矢量....如何搜索并销毁这个非空白空格?

编辑

很明显,我甚至都不清楚,因为答案到处都是.这是一个更简单的测试用例:

> grepl("Clinic Information:", test[2])
[1] FALSE
> grepl("Clinic Information:", "Clinic Information:") # Where the second phrase is copy/pasted from the screen
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

在屏幕和dput输出中打印的单词"Clinic"和"Information"之间有一个空格,但字符串中的任何内容都不是标准空间.我的目标是消除这个,所以我可以正确地将这个元素弄出来.

Ala*_*rry 5

将我的评论升级为答案:

您的字符串包含一个不间断的空格(U + 00A0),当您粘贴它时,它会转换为正常空格.使用perl风格的正则表达式可以很容易地匹配Unicode中所有奇怪的类似空格的字符:

grepl("[0-9]+\\p{Zs}[A-Za-z ]+", test, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)

perl regexp语法是\p{categoryName},额外的反斜杠是包含反斜杠的字符串语法的一部分,"Zs"是"Separator"Unicode类别,"space"子类别.只有U + 00A0字符的简单方法是

grepl("[0-9]+[ \\xa0][A-Za-z ]+", test)
Run Code Online (Sandbox Code Playgroud)