从 APA 引文中提取文本
Extracting text from APA citation
我有一个包含 APA 引文样式文本的电子表格,我想将它们拆分为 author(s)、date 和 标题.
引文的一个例子是:
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))
仅 returns 部分标题 - 输出应显示 ).
和以下 .
.
之间的每个字符
我试过 =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
哪里错了?
尝试:
=split(SUBSTITUTE(SUBSTITUTE(I2, "(",""), ")", ""),".")
如果2010左右不替换括号,它认为是负数-2010。
对于您的标题,请尝试将索引拆分添加到您现有的公式中:
=index(split(REGEXEXTRACT(A5, "\)\.\s(.*[^\.])\.\s" ),"."),0,1)&"."
可以通过以下方式找到标题(至少在您给出的两个示例中):
=MID(I2,find("). ",I2)+3,find(". ",I2,find("). ",I2)+3)-(find("). ",I2)+3)+1)
英文:获取从第一次出现的 ).
开始到并包括第一次出现的 .
之后的子字符串。
如果您希望使用 REGEXEXTRACT
,那么这个方法可行(在您的两个示例中)。 (还可以看到一个Regex101 demo。):
=REGEXEXTRACT(I3,"(?:.*\(\d{4}\)\.\s)([^.]*\.)(?: .*)")
Where is the mistake?
在您的表达式中,您正在捕获 (.*[^\.])
,其中 贪婪地包含 任意数量的字符,后跟字符 class [=16] 中的一个字符=],表示可以抓取多个句子。表达式以未捕获的 \.\s
结束,因此捕获组将在 之前 结束 period-then-space,而不是包含它。
我有一个包含 APA 引文样式文本的电子表格,我想将它们拆分为 author(s)、date 和 标题.
引文的一个例子是:
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))
仅 returns 部分标题 - 输出应显示 ).
和以下 .
.
我试过 =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
哪里错了?
尝试:
=split(SUBSTITUTE(SUBSTITUTE(I2, "(",""), ")", ""),".")
如果2010左右不替换括号,它认为是负数-2010。
对于您的标题,请尝试将索引拆分添加到您现有的公式中:
=index(split(REGEXEXTRACT(A5, "\)\.\s(.*[^\.])\.\s" ),"."),0,1)&"."
可以通过以下方式找到标题(至少在您给出的两个示例中):
=MID(I2,find("). ",I2)+3,find(". ",I2,find("). ",I2)+3)-(find("). ",I2)+3)+1)
英文:获取从第一次出现的 ).
开始到并包括第一次出现的 .
之后的子字符串。
如果您希望使用 REGEXEXTRACT
,那么这个方法可行(在您的两个示例中)。 (还可以看到一个Regex101 demo。):
=REGEXEXTRACT(I3,"(?:.*\(\d{4}\)\.\s)([^.]*\.)(?: .*)")
Where is the mistake?
在您的表达式中,您正在捕获 (.*[^\.])
,其中 贪婪地包含 任意数量的字符,后跟字符 class [=16] 中的一个字符=],表示可以抓取多个句子。表达式以未捕获的 \.\s
结束,因此捕获组将在 之前 结束 period-then-space,而不是包含它。