Python 如何提取关键字和日期前后的文本

Python 如何提取关键字和日期前后的文本,python,pandas,text,Python,Pandas,Text,我想将作者姓名、域和日期从数据框列中分离出来 当 .split(“in”) 很好地分离了左边的作者姓名,我还想分离域名和日期,这不是通过一个空格符号分开 从导入数据帧 Cars={'Details':['Daniel Jacobs in HackeMoon.com 2017年7月31日','Wil Zelk in WebsiteAb.deJan 28','Wil Zelk in anotherwebsite.chJan 28,2019'], } df=数据帧(车辆,列=['Details'])

我想将作者姓名、域和日期从数据框列中分离出来

当 .split(“in”) 很好地分离了左边的作者姓名,我还想分离域名和日期,这不是通过一个空格符号分开

从导入数据帧
Cars={'Details':['Daniel Jacobs in HackeMoon.com 2017年7月31日','Wil Zelk in WebsiteAb.deJan 28','Wil Zelk in anotherwebsite.chJan 28,2019'],
}
df=数据帧(车辆,列=['Details'])
打印(df)

您可以结合正则表达式尝试
DataFrame.str.extract

df['Details'].str.extract(r'(?P<author>.*?) in (?P<url>.*)(?P<date>[A-Z].*)', expand=True)
为了分离字符串,我使用以下假设:

  • 名称和url之间用“in”分隔
  • 日期的第一个字符(仅第一个字符)是大写字母(因此字符串中的最后一个大写字符标记日期部分的第一个字符)

反响很好。非常感谢您抽出时间。你的假设是正确的,而且效果很好。你也可以在一些情况下帮助我,这些情况下并不总是有一个url。因此,在以下情况下:
python Cars={'Details':['Daniel JacobsJul 31,2017','Wil Zelk in websiteab.deJan 28','Wil Zelk in anotherwebsite.chJan 28,2019'],}df=DataFrame(Cars,columns=['Details'])print(df
只要每行中都有日期,
df['Details'].str.extract(r'(?P.*?:in){0,1}(?P\S*?)\S*(?P[A-Z][^A-Z]*?$),expand=True)
。url模式中的
\S*
只是使用了一个事实,url通常不包含空格(它匹配除空格以外的所有字符)。同样,您的答案非常有用!
df['Details'].str.extract(r'(?P<author>.*?) in (?P<url>.*)(?P<date>[A-Z].*)', expand=True)
          author                url          date
0  Daniel Jacobs      HackeMoon.com  Jul 31, 2017
1       Wil Zelk      websiteabc.de        Jan 28
2       Wil Zelk  anotherwebsite.ch  Jan 28, 2019