如何使用正后向断言从 "named" 之后的字符串中提取子字符串

How to use positive lookbehind assertions to extract substring from string following the word "named"

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

我相信我需要使用积极的回顾断言和正则表达式的搜索选项。我查看了 re.search 的文档以及以下 SO 问题:How to extract the substring between two markers? and Regex captured groups with positive lookbehind (python), as well as this tutorial https://www.rexegg.com/regex-lookarounds.html。我仍然觉得卡住了。

这是我目前的两个想法:

A)

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

B)

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

根据文档,A) 应该 return 'Cheryl,' 但我收到属性错误:AttributeError: 'NoneType' object has no attribute 'group'.

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

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

m = re.search('(?<=named\s)(\w+)', tweet)

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

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

另见 https://regex101.com/r/nZiAFN/1