首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python正则表达式检测照片标题中的情侣

用Python正则表达式检测照片标题中的情侣
EN

Stack Overflow用户
提问于 2017-09-15 02:38:07
回答 1查看 214关注 0票数 0

我正在做一个网络抓取项目,在那里我试图从一系列图片标题中提取名字。我将标题存储为unicode字符串列表,如:

Phil Collins, with Beth and Jerry Smith

我已经能够使用foo = re.compile(r" +with +|, +and +| +and +|, +")re.split(foo)将标题划分为不同的单独名称,如:

['Phil Collins', 'Beth', 'Jerry Smith']

不幸的是,我很难找到一种将Jane和曾傑瑞Smith拆分的方法(我对正则表达式很陌生),能够检测到他们的姓氏并产生输出:

['Phil Collins', 'Beth Smith', 'Jerry Smith']

我能够使用Beth and Jerry Smith检测re.compile(r"[A-Z][a-z]+ +and +[A-Z][a-z]+ +[A-Z][a-z]+",但我不确定检测到后处理它的最佳方法是什么。

我想解决的问题是,我需要反复检查名单,发现“贝丝”不是全名,读“曾傑瑞史密斯”,最后把“史密斯”读到“贝丝”,给我一个完整的列表:“菲尔·柯林斯”、“贝丝·史密斯”、“曾傑瑞史密斯”。

re中是否有一种方法可以将匹配的子字符串输送到一个函数,以便我可以修改它以包含贝丝的姓氏?还是我用正确的方式处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-15 02:56:15

与使用复杂的RegEx搜索名称和分隔符不同,您可以使用re.split和所有可能的分隔符的较小的RegEx来拆分文本。

在这里,我看到的分隔符是:",with“和" and”(空格在开始和结束)。您可以通过连接每个分隔符来创建RegEx。

代码语言:javascript
复制
import re

text = "Phil Collins, with Beth and Jerry Smith"

delimiters = [r",\s+with\s+", "\s+and\s+"]
regex = "|".join(delimiters)
print(re.split(regex, text, flags=re.IGNORECASE))
# -> ['Phil Collins', 'Beth', 'Jerry Smith']

编辑

要加入“贝丝”与“史密斯”,“曾傑瑞”与“史密斯”,你需要先分裂的“与”,然后分裂的和。

代码语言:javascript
复制
import re

text = "Phil Collins, with Beth and Jerry Smith"

for part in re.split(",\s+with\s+", text):
    first, last = re.findall(r"(\w+(?:\s+and\s+\w+)?)\s+(\w+)",
                             part, flags=re.UNICODE)[0]
    names = re.split(r"\s+and\s+", first)
    result = [name + " " + last
              for name in names]
    print(result)

你得到:

代码语言:javascript
复制
['Phil Collins']
['Beth Smith', 'Jerry Smith']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46230878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档