我有一个字符向量,它是通过 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
中打印的“诊所”和“信息”一词之间有一个空格。输出,但字符串中的任何内容都不是标准空间。我的目标是消除这一点,以便我可以正确地提取该元素。
最佳答案
将我的评论升级为答案:
您的字符串包含一个不间断空格 (U+00A0),在您粘贴时将其转换为普通空格。使用 perl 样式的正则表达式可以轻松匹配 Unicode 中所有奇怪的类似空格的字符:
grepl("[0-9]+\\p{Zs}[A-Za-z ]+", test, perl=TRUE)
perl 正则表达式语法是
\p{categoryName}
,额外的反斜杠是包含反斜杠的字符串语法的一部分,“Zs”是“分隔符”Unicode 类别,“空格”子类别。仅用于 U+00A0 字符的更简单方法是grepl("[0-9]+[ \\xa0][A-Za-z ]+", test)
关于regex - 这个空白藏在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702812/