【问题标题】:Regular expression for a list separated by ',' or 'and'由“,”或“和”分隔的列表的正则表达式
【发布时间】: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] 匹配单个字符、and。要匹配一系列字符,您需要将它们写在字符类之外。
  • 我认为尝试设计单个正则表达式将变得不必要地复杂。我首先将字符串分成较小的部分,然后单独处理每个部分。使用这种方法,您只能在最后处理您的简化输入。
  • @JaredGoguen 你可能是对的。你提到的是我开始使用的方法,但它看起来很乱,所以我想到了使用正则表达式。引文的其他细节似乎并不难捕捉,所以我想我可以把它们串起来。我想我现在会继续使用拆分方法。
  • @pbreach 我正在考虑将两者结合起来,因此使用正则表达式将初始引用拆分为多个部分,然后使用单独的正则表达式处理每个部分。

标签: python regex citations


【解决方案1】:

这是一种可能的方法:

citation = """Joe Bob, Jane Doe and George H. Smith (2017). A title of an interesting report: Part 2. Report Series no. 101, Place for Generating Reports, Department of Report Makers, City, Province, Country, 44 pages. ISBN: (print) 123-0-1234-1234-5; (online) 123-0-1234-1234-5."""

citation = citation.replace(' and ', ',')
citation = citation[:citation.find('(')]

names = [name.strip() for name in citation.split(',')]

print names

给你:

['Joe Bob', 'Jane Doe', 'George H. Smith']

and 转换为逗号,切分到年份开始的位置并以逗号分隔。

或者以更紧凑的形式:

names = [name.strip() for name in citation[:citation.find('(')].replace(' and ', ',').split(',')]

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多