首页 > 解决方案 > 在R中按开始和结束匹配文本

问题描述

我在 R 中做一个简单的网络抓取,但我有一个我无法解决的问题。

当我下载 webscode 时,我需要提取一系列位置(主要是国家名称)。

所以,我有这样的文字:

text <- "  Agaon fasciatum Waterston (Life: Kingdom: Metazoa (animals); Phylum: Arthropoda; Class: Hexapoda; Order: Hymenoptera;  Superfamily: Chalcidoidea; Family: Agaonidae; Genus: Agaon) Agaon fasciatum Waterston, 1914, Agaon tridentatum Joseph 1959. Holotype in The Natural History Museum, London. Type locality: Uganda. Distribution   Cameroon, Gabon, Guinea, Uganda, Zambia. Biology Host fig: Ficus cyathistipula cyathistipula Warb. References Waterston, J. 1914. Notes on African Chalcidoidea. I. Bulletin of Entomological Research. 5:249-258. Credits Photographs © Jean-Yves Rasplus (INRA) or © Simon van Noort (Iziko Museums of South Africa). Next  genus: Alfonsiella        Next species: Agaon gabonense"

我需要提取分布,wchi 对应于表示国家列表末尾的fromdistribution到 the的单词。 .

str_locate(string = text, pattern = "Distribution")

我可以检测到“分发”一词的位置。我现在可以通过某种".*\\."方式检测到“。”但是当我尝试时

str_locate(string = text, pattern = "Distribution.*\\.")

我没有任何结果。

有什么解决办法吗?我现在这应该很容易,因为我在任何地方都找不到答案。

提前致谢,

安东尼奥

标签: rpattern-matching

解决方案


碱基R

gsub(".*Distribution Â? *([^.]+)\\..*", "\\1", text)
# [1] "Cameroon, Gabon, Guinea, Uganda, Zambia"
### or
gsub(".*(Distribution Â? *[^.]+)\\..*", "\\1", text)
# [1] "Distribution   Cameroon, Gabon, Guinea, Uganda, Zambia"

或者

regmatches(text, gregexpr("Distribution Â? *[^.]+\\.", text))
# [[1]]
# [1] "Distribution   Cameroon, Gabon, Guinea, Uganda, Zambia."

如果您使用gsub,请意识到如果没有找到,原件text将被退回,不变。(所以只要检查一下newtext != text以确保你找到了一些东西。)

弦乐

stringr::str_extract(text, "Distribution Â? *[^.]+\\.")
# [1] "Distribution   Cameroon, Gabon, Guinea, Uganda, Zambia."

如果您需要位置字符串索引,

stringr::str_locate(text, "Distribution Â? *[^.]+\\.")
#      start end
# [1,]   320 375

推荐阅读