1

我有一系列来自推文的熊猫文本。这些推文是关于狗的。一些推文包含狗的名字。该名称以下列方式显示。“...blah blah blah name .blah blah blah ...” 我需要的作品前后的字符数未知。我想提取name

我相信我需要使用积极的后向断言和正则表达式的搜索选项。我查看了 re.search 的文档以及以下 SO 问题:如何提取两个标记之间的子字符串?正则表达式以正向后视 (python)以及本教程https://www.rexegg.com/regex-lookarounds.html捕获组。我还是觉得卡住了。

这是我到目前为止的两个想法:

一个)

tweet = 'This is a Shotokon Macadamia mix named Cheryl. Sophisticated af.'
m = re.search('(?<=named)[A-Z][a-z]+', tweet)
m.group(0)

二)

s.str.extract(^named([A-Z][a-z])\.$)

根据文档,A) 应该返回“Cheryl”,但我得到一个属性错误:AttributeError: 'NoneType' object has no attribute 'group'.

B)仅适用于系列,并且并非推文系列中的每个元素都包含“...命名名称”。结构体。我不确定如何将其合并到代码中,以便返回 Cheryl。

4

2 回答 2

1

Pythons 说m是 a 'NoneType' object因为正则表达式不匹配任何字符串,所以你不能从它的结果中提取一个组。为了获得正确的匹配,您应该在“命名”之后添加一个空格。因此,只需尝试:

(?<=named )[A-Z][a-z]+

另请参阅https://regex101.com/r/nZiAFN/1

于 2019-03-26T01:18:00.160 回答
1

以下正则表达式仅提取出现在命名字符串之后的名称:

m = re.search('(?<=named\s)(\w+)', tweet)
于 2019-03-26T01:14:33.053 回答