我正在使用 IMPORTXML 来获取一些数据,然后使用正则表达式来提取一些文本。我想要提取的部分是姓名。
它总是跟在“全名:”(减去引号)后面。名字后面总是有一个单词,后面跟着另一个冒号。这个单词可以是发音、语言学、类型,或者其他任何词。
我能得到的最接近的公式是这个:
=IFERROR(REGEXEXTRACT(REGEXREPLACE(JOIN(" ", IMPORTXML(B13, "//div[@id='meta']")), "\s+", " "), "Full Name:\s*([A-Za-z]+(?:[-'\s][A-Za-z]+)*)"), "")
不幸的是,最后一句话还是留下来了。
例如如果你有:
全名:亚伯拉罕·林肯 昵称:诚实的亚伯。
我只想让它拉出亚伯拉罕·林肯。我有这个公式输出:
亚伯拉罕·林肯 昵称
其他示例:
- 全名: John Smith-Rogers 完成:
- 全名:David Ben-Williams 序言:
- 全名:Sean O'Brian 昵称:
- 全名: D'Andre Ayton 时间:
- 全名:Andy Van Slyke 姓名:
各自的输出:
- 约翰·史密斯-罗杰斯
- 戴维·本·威廉姆斯
- 肖恩·奥布莱恩
- 安德烈·艾顿
- 安迪·范·斯莱克
实例: https://www.baseball-reference.com/players/l/lopezal01.shtml
公式应输出:Alfonso Ramon Lopez
https://www.baseball-reference.com/players/r/ruthba01.shtml
公式应输出:George Herman Ruth
我还需要做什么才能确保 O'Brien 和 Smith-Rogers 这样的名字不受影响?
根据您提供的以下示例,我设计了一个可能对您有用的解决方案。
尝试这个正则表达式:
参考: Regexextract
尝试匹配:
并替换为:
参见:regex101
解释
匹配:
^Full Name:
:字符串以文字“全名:”开头( ... )
:然后将所有内容捕获到第 1 组[^:]+?
: 不是冒号(懒惰),并确保它\w+:$
:后面跟着一个空格和一个冒号的单词。代替:
$1
:替换为全名。Full Name:
文字Full Name
后跟文字冒号:
\s+
一个或多个空格(.*?)
捕获组 1 可延迟捕获任意字符。\s+
一个或多个空格"[^:\s]+:
任何非冒号的字符:
,或s
空格后跟文字冒号:
这种方法使用 given 的略微变体
xpath-query
,然后提取全名