【发布时间】:2012-07-28 16:40:33
【问题描述】:
我有一个字符向量,它是通过pdftotext(命令行工具)抓取的一些 PDF 文件。
一切都(幸福地)排列整齐。然而,这个向量充满了一种我的正则表达式无法理解的空格:
> 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"
很明显,dput 中没有分配一些字符,如下面的问题所示:
How to properly dput internationalized text?
我无法复制/粘贴整个向量....如何搜索和销毁这个非空白空格?
编辑
很明显,我什至没有说清楚,因为答案无处不在。这是一个更简单的测试用例:
> grepl("Clinic Information:", test[2])
[1] FALSE
> grepl("Clinic Information:", "Clinic Information:") # Where the second phrase is copy/pasted from the screen
[1] TRUE
在屏幕上和dput 输出中打印的单词“Clinic”和“Information”之间有一个空格,但字符串中的任何内容都不是标准空格。我的目标是消除这个问题,这样我就可以正确地 grep 那个元素了。
【问题讨论】:
-
那个空白不在向量本身,它只是在它的显示方式中。
-
看看
lapply(test[4], utf8ToInt),看看里面有没有大数字。 -
@AlanCurry
> lapply(test[4], utf8ToInt) [1] 51 53 49 160 83 111 117 116 104 160 87 97 115 104 98 117 114 110 -
160 是你的问题。这是一个不间断的空间。您可以通过在 perl 风格的正则表达式中使用 Unicode 类别来匹配它(以及其他一些奇怪的空格类型): grepl("[0-9]+\\p{Zs}[A-Za-z ]+" ,test,perl=TRUE)
-
@AlanCurry,你能把它作为答案发布吗?