从APA引文中提取文本

时间:2016-07-04 00:23:44

标签: google-sheets formulas re2

我有一个包含APA引文样式文本的电子表格,我想将它们分成 author(s) date title

引用的一个例子是:

Parikka, J. (2010). Insect Media: An Archaeology of Animals and Technology. Minneapolis: Univ Of Minnesota Press.

鉴于此字符串位于字段I2中,我设法执行以下操作:

名称:=LEFT(I2, FIND("(", I2)-1)会产生Parikka, J.

日期:=MID(I2,FIND("(",I2)+1,FIND(")",I2)-FIND("(",I2)-1)收益2010

但是,我一直在提取标题Insect Media: An Archaeology of Animals and Technology.

的名称

我当前的公式=MID(I2,FIND(").",I2)+2,FIND(").",I2)-FIND(".",I2))仅部分返回标题 - 输出应显示).与以下.之间的每个字符。

我尝试了=REGEXEXTRACT(I2, "\)\.\s(.*[^\.])\.\s" ),这通常有效但不会停留在第一个“。” - 就像这个例子一样:

Sanders, E. B.-N., Brandt, E., & Binder, T. (2010). A framework for organizing the tools and techniques of participatory design. In Proceedings of the 11th biennial participatory design conference (pp. 195–198). ACM. Retrieved from http://dl.acm.org/citation.cfm?id=1900476

错误在哪里?

2 个答案:

答案 0 :(得分:1)

可以找到标题(至少在你给出的两个例子中):

=MID(I2,find("). ",I2)+3,find(". ",I2,find("). ",I2)+3)-(find("). ",I2)+3)+1)

英文:从第一次出现).之后开始获取子字符串,直到并包括第一次出现的.

如果您希望使用REGEXEXTRACT,则可以使用(在您的两个示例中)。 (您还可以看到Regex101 demo。):

=REGEXEXTRACT(I3,"(?:.*\(\d{4}\)\.\s)([^.]*\.)(?: .*)")
  

错误在哪里?

在你的表达式中,你正在捕捉(.*[^\.]),其中贪婪地包含任意数量的字符,后跟字符类not (backslash or dot)中的字符,这意味着多个句子可以被捕获。表达式以\.\s结束,但未捕获,因此捕获组将在之前结束,而不是包含它。

答案 1 :(得分:0)

尝试:

=split(SUBSTITUTE(SUBSTITUTE(I2, "(",""), ")", ""),".")

如果你不在2010年左右替换括号,它会认为它是负数-2010。

对于标题,请尝试将索引拆分添加到现有公式中:

=index(split(REGEXEXTRACT(A5, "\)\.\s(.*[^\.])\.\s" ),"."),0,1)&"."