如何使用正向查找断言从单词“named”后面的字符串中提取子字符串

2024-04-20 13:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列来自tweets的文字。推特是关于狗的。一些推特上有狗的名字。名称以以下方式显示。“。。。呜呜呜呜叫名字。布拉布拉布拉布拉布拉布拉…“之前和之后的作品我需要未知的字符数。我想提取名称。你知道吗

我相信我需要使用肯定的lookback断言和regex的搜索选项。我已经看了文件检索以及以下SO问题:How to extract the substring between two markers?Regex captured groups with positive lookbehind (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)只适用于一个系列,而不是tweet系列中的每个元素都包含“。。。命名为名称“结构。我不知道如何将它合并到代码中,所以它返回Cheryl。你知道吗


Tags: 名称方式groupextract断言名字字符作品
2条回答

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

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

Pythons说m'NoneType' object,因为regex与任何字符串都不匹配,所以不能从结果中提取组。为了得到正确的匹配,你应该在“named”后面加一个空格。因此,只需尝试:

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

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

相关问题 更多 >