Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何根据一组正则表达式对字符串进行分类_R_Regex_String_Stringr - Fatal编程技术网

R:如何根据一组正则表达式对字符串进行分类

R:如何根据一组正则表达式对字符串进行分类,r,regex,string,stringr,R,Regex,String,Stringr,我有一个文本字符串向量,它描述了书中图像的来源,但格式并不完全一致——它们是从LaTeX来源捕获并写入文本文件的 我需要处理这些信息并收集有关来源归属的信息 和权限状态。字符串示例如下所示: strings <- ' GBD 2016 Alcohol Collaborators (2018) \citet {DeBoldFriedman:2015}, permission required Author graphic, using various public domain images

我有一个文本字符串向量,它描述了书中图像的来源,但格式并不完全一致——它们是从LaTeX来源捕获并写入文本文件的

我需要处理这些信息并收集有关来源归属的信息 和权限状态。字符串示例如下所示:

strings <- '
GBD 2016 Alcohol Collaborators (2018)
\citet {DeBoldFriedman:2015}, permission required
Author graphic, using various public domain images
\url {http://www.histogames.com/HTML/inventaire/periodes-historiques/prehistoire.php}
\url {https://commons.wikimedia.org/wiki/File:Egyptmotionseries.jpg}
\url {http://commons.wikimedia.org}, public domain.
\citet {Plot:1685}, author image collection
Author image collection
 From \citet {Priestley:1765}, author image collection
 Author image collection
 Courtesy Library of Congress
\citet {Langren:1644}, image courtesy of the Koninklijke Bibliotheek van Belgi\"e 
Public domain
Author graphic
Author graphic
Author graphic
Author image collection
Wikipedia, https://commons.wikimedia.org/wiki/File:Tablas\_alfonsies.jpg, public domain
'
执行我想要的操作的伪代码(不起作用):


status从您的模式来看,字符串实际上可以属于零个或多个,而不仅仅是一个。如果这是真的,那么第一步就是确定字符串拥有哪些类别(0或更多)

我没有足够的
字符串来进行真正的测试,因此我将生成一些简单的数据和模式:


strings
grep
返回零个或多个表示匹配索引的整数。如果未找到任何内容,则返回长度为0的整数(0)
。一个补丁是使用
if(grepl(AUpat,strings[i],…)
。话虽如此,您可以将其矢量化一点以获得更好的性能…您可以提供另一个不同的
字符串
条目吗?这一个包括所有四个类别。一个条目不能有多个分类吗?你的<代码> PATS <代码>看起来像是正交的(无关的)分类。用户101089.请考虑回溯到你的回答问题的历史中去;这样做不仅给回答者提供了一些观点,也为有类似问题的读者提供了一些结尾。虽然你只能接受一个答案,但你可以选择增加你认为有帮助的选票。(如果仍然存在问题,您可能需要编辑问题并提供更多详细信息。)@r2evans是的,字符串可以包含更多类别,因此您下面的答案为我提供了一种解决方法。通常,我会在有机会测试答案或发现不足之处后接受答案。你的答案考虑了几种可能性,已经投了赞成票。谢谢!好的:我会查看我的个人资料页面,看看我可以/应该接受什么。同时,你的回答给了我所需要的一切,所以我会接受你的回答,再次感谢你的贡献!
AUpat <- "author (image|graphic|collection)"
PDpat <- "public domain"
REQpat <- "permission required"
LIBpat <- "courtesy|by permission"

# or as a list:
pats <- list(
  'AU' = "author (image|graphic|collection)",
  'PD' = "public domain",
  'REQ'= "permission required",
  'LIB'= "courtesy|by permission"
)
status <- rep("", length(strings))
for(i in seq_along(strings)) {
  if      (grep(AUpat, strings[i],  ignore.case=TRUE)) status[i] <- "AU"
  else if (grep(PDpat, strings[i],  ignore.case=TRUE)) status[i] <- "PD"
  else if (grep(REQpat, strings[i], ignore.case=TRUE)) status[i] <- "REQ"
  else if (grep(LIBpat, strings[i], ignore.case=TRUE)) status[i] <- "LIB"
}
Error in if (grep(AUpat, strings[i])) status[i] <- "AU" else if (grep(PDpat,  : 
  argument is of length zero