如何调整REGEX公式精准提取全名,排除后续带冒号的前缀词
正则表达式提取全名的公式调整方案
问题说明
通过IMPORTXML抓取网页数据后,需提取Full Name:后的全名,但现有公式会错误带出全名后带冒号的词(如Nickname),同时要保留含连字符、撇号的特殊格式名字(如O'Brien、Smith-Rogers)。
当前使用公式:
=IFERROR(REGEXEXTRACT(REGEXREPLACE(JOIN(" ", IMPORTXML(B13, "//div[@id='meta']")), "\s+", " "), "Full Name:\s*([A-Za-z]+(?:[-'\s][A-Za-z]+)*)"), "")
调整后的公式
=IFERROR(REGEXEXTRACT(REGEXREPLACE(JOIN(" ", IMPORTXML(B13, "//div[@id='meta']")), "\s+", " "), "Full Name:\s*([A-Za-z]+(?:[-'\s][A-Za-z]+)*?)\s+\w+:"), "")
调整逻辑
- 启用非贪婪匹配:在原捕获组末尾添加
?,将([A-Za-z]+(?:[-'\s][A-Za-z]+)*)改为([A-Za-z]+(?:[-'\s][A-Za-z]+)*?),让正则匹配到第一个终止条件就停止,避免过度抓取后续内容。 - 明确终止边界:在捕获组后追加
\s+\w+:,指定全名的结束标志为「空格+任意单词+冒号」,精准截断到下一个带冒号的词之前,确保只提取Full Name:到该边界之间的内容。
效果验证
| 原始文本 | 目标输出 | 调整后公式输出 |
|---|---|---|
| Full Name: Abraham Lincoln Nickname: Honest Abe. | Abraham Lincoln | Abraham Lincoln |
| Full Name: John Smith-Rogers Finishing: | John Smith-Rogers | John Smith-Rogers |
| Full Name: David Ben-Williams Prelude: | David Ben-Williams | David Ben-Williams |
| Full Name: Sean O'Brian Nickname: | Sean O'Brian | Sean O'Brian |
| Full Name: D'Andre Ayton Time: | D'Andre Ayton | D'Andre Ayton |
| Full Name: Andy Van Slyke Name: | Andy Van Slyke | Andy Van Slyke |
针对提供的网页测试:
- 提取后输出:Alfonso Ramon Lopez
- 提取后输出:George Herman Ruth
内容的提问来源于stack exchange,提问作者InStackOfHelp
相关产品推荐
相关产品推荐

