【发布时间】:2017-10-11 16:48:09
【问题描述】:
我有一个很长的引文列表,我需要从中提取每个作者的全名、出版年份、标题等。其中一个引文如下所示:
Joe Bob、Jane Doe 和 George H. Smith(2017 年)。一个有趣的报告的标题:第 2 部分。报告系列编号。 101, Place for Generate Reports, Department of Report Makers, City, Province, Country, 44 页。 国际标准书号:(印刷)123-0-1234-1234-5; (在线)123-0-1234-1234-5。
所有引用的格式都相同。我现在坚持的部分与提取作者的全名有关。我在这里阅读了有关如何通过执行[\\s,;]+ 之类的操作从逗号、空格或分号分隔的列表here 中提取值的信息。对于逗号或“和”这个词,我该如何做类似的事情?
我认为“和”需要被视为一组字符,所以我尝试[^,|[and])]+ 匹配, 或字符集[and] 之间的空格,但这似乎不起作用。这个question 的相似之处在于它处理逗号或空格,但解决方案涉及隐式剥离空格。
在记下这部分之后,我计划构建表达式的其余部分以捕获其他引用细节。所以假设我们正在处理的字符串是:
Joe Bob、Jane Doe 和 George H. Smith
并且应该捕获每个全名。
【问题讨论】:
-
我不确定您是否可以像这样过度简化输入。您可以尝试
,\s*|\s+and\s+或(?:,\s*|\s+and\s+)+,但最终可能没有用。仅供参考:[and]匹配单个字符、a、n或d。要匹配一系列字符,您需要将它们写在字符类之外。 -
我认为尝试设计单个正则表达式将变得不必要地复杂。我首先将字符串分成较小的部分,然后单独处理每个部分。使用这种方法,您只能在最后处理您的简化输入。
-
@JaredGoguen 你可能是对的。你提到的是我开始使用的方法,但它看起来很乱,所以我想到了使用正则表达式。引文的其他细节似乎并不难捕捉,所以我想我可以把它们串起来。我想我现在会继续使用拆分方法。
-
@pbreach 我正在考虑将两者结合起来,因此使用正则表达式将初始引用拆分为多个部分,然后使用单独的正则表达式处理每个部分。