如何在python中的特定关键字之前提取文本?

时间:2016-02-24 08:00:00

标签: python regex

import re
col4="""May god bless our families studied. CiteSeerX  2009-05-24 2007-11-19 2004"""
b=re.findall(r'\sCiteSeerX',col4)
print b

我必须打印“愿上帝保佑我们的家人研究”。我正在使用pythton正则表达式来提取文件名,但我只是将CiteSeerX作为输出。我在一个非常大的数据集上这样做,所以我只想使用正则表达式,如果有任何其他有效和更快的方式请指出。
此外,我希望去年 2004 作为输出。 我是正则表达式的新手,现在我的上面的实现是错误的但我找不到正确的表达式。这是一个非常天真的问题。对不起,谢谢你。

2 个答案:

答案 0 :(得分:0)

如果您所有数据的结构与您提供的样本相似,那么您可以选择:

import re
data = re.findall("(.*?) CiteSeerX.*(\d{4})$", col4)
if data:
    # we have a match extract the first capturing group
    title, year = data[0]
    print(title, year)
else:
    print("Unable to parse the string")

# Output: May god bless our families studied. 2004

此片段提取CiteSeerX之前的所有内容作为标题,最后4位数字作为年份(同样,假设您的所有数据的结构相似)。括号标记了我们感兴趣的部分的捕获组。

<强>更新: 对于发布年份后有元数据的情况,请使用以下正则表达式:

import re
YEAR = "\d{4}"
DATE = "\d\d\d\d-\d\d-\d\d"
def parse_citation(s):
    regex = "(.*?) CiteSeerX\s+{date} {date} ({year}).*$".format(date=DATE, year=YEAR)
    data = re.findall(regex, s)
    if data:
        # we have a match extract the first group
        return data[0]
    else:
        return None

c1 = """May god bless our families studied. CiteSeerX  2009-05-24 2007-11-19 2004"""
c2 = """May god bless our families studied. CiteSeerX 2009-05-24 2007-11-19 2004 application/pdf text http //citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.1.1483 http //www.biomedcentral.com/content/pdf/1471-2350-5-20.pdf en Metadata may be used without restrictions as long as the oai identifier remains attached to it."""
print(parse_citation(c1))
print(parse_citation(c2))
# Output:
# ('May god bless our families studied.', '2004')
# ('May god bless our families studied.', '2004')

答案 1 :(得分:0)

这是一个不使用正则表达式的答案。

>>> s = "now is the time for all good men"
>>> s.find("all")
20
>>> s[:20]
'now is the time for '
>>>