regex - 这个空白藏在哪里?

标签 regex r

我有一个字符向量,它是通过 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/

相关文章:

python - 从字符串中删除 html 图像标签和它们之间的所有内容

java - 动态定义 CSV 文件的字段分隔符和文本限定符

regex - 使用awk计算并打印正则表达式得到的值的平均值

python - 正则表达式两组匹配所有内容直到模式

r - Shiny App 中的不同页面

r - 在 R 中生成向量值的运行组合

r - 如果任何行包含子字符串,则标记

r - 具有三个度量的分组条形图

R 列表——如何处理元素名称?

android - JSoup如何选择和获取具体信息