如何用Excel公式、正则、PowerShell、VBA提取单元格姓名
提取混杂HTML字符串中的姓名方案
Excel公式方案
适用于Excel 365/2021(支持动态数组)
用标签拆分+格式过滤的组合,精准提取符合格式的姓名:
=TEXTJOIN(", ",TRUE,FILTER(TEXTSPLIT(SUBSTITUTE(SUBSTITUTE(A1,"<","|"),">","|"),"|"),ISNUMBER(SEARCH("^[A-Z][a-z]+( [A-Z][a-z]+)*$",TEXTSPLIT(SUBSTITUTE(SUBSTITUTE(A1,"<","|"),">","|"),"|")))))
操作逻辑:先把HTML标签的<>替换为分隔符|,拆分字符串后,过滤出首字母大写、支持中间带空格的姓名格式内容,最后用逗号拼接结果。
适用于旧版Excel(无动态数组)
使用数组公式(输入后按Ctrl+Shift+Enter确认),最多提取2个姓名:
=SUBSTITUTE(TRIM(INDEX(MID(A1,SMALL(IF(ISNUMBER(SEARCH("^[A-Z]",MID(A1,ROW($1:$1000),1))),ROW($1:$1000),9999),ROW($1:$2)),LOOKUP(9999,SEARCH(" [a-z]",MID(A1,SMALL(IF(ISNUMBER(SEARCH("^[A-Z]",MID(A1,ROW($1:$1000),1))),ROW($1:$1000),9999),ROW($1:$2))+ROW($1:$100),1))-SMALL(IF(ISNUMBER(SEARCH("^[A-Z]",MID(A1,ROW($1:$1000),1))),ROW($1:$1000),9999),ROW($1:$2))+1)&", ")),", ",", ")
VBA方案
- 打开Excel按
Alt+F11进入VBA编辑器,插入新模块 - 粘贴以下代码:
Function ExtractNames(rng As Range) As String Dim regEx As Object Dim matches As Object Dim match As Object Dim result As String Set regEx = CreateObject("VBScript.RegExp") regEx.Global = True ' 匹配规则:支持单姓单名、复姓/中间带空格的姓名(如Henri Le Bot) regEx.Pattern = "[A-Z][a-z]+(?: [A-Z][a-z]+)+" Set matches = regEx.Execute(rng.Value) For Each match In matches result = result & match.Value & ", " Next match ' 移除末尾多余的逗号和空格 If Len(result) > 0 Then ExtractNames = Left(result, Len(result) - 2) End Function
- 返回Excel,在目标单元格输入
=ExtractNames(A1)即可提取A1单元格中的姓名
PowerShell处理CSV方案
修正正则匹配逻辑,批量处理CSV文件:
# 读取目标CSV文件,替换为你的文件路径 $csv = Import-Csv -Path "C:\input.csv" # 定义匹配姓名的正则规则 $nameRegex = [regex]::new("[A-Z][a-z]+(?: [A-Z][a-z]+)+", [System.Text.RegularExpressions.RegexOptions]::Global) foreach ($row in $csv) { # 提取当前行内容中的所有姓名 $nameMatches = $nameRegex.Matches($row.Content) $extractedNames = $nameMatches.Value -join ", " # 添加新列存储提取结果 $row | Add-Member -MemberType NoteProperty -Name "ExtractedNames" -Value $extractedNames -Force } # 导出处理后的CSV文件,替换为你的输出路径 $csv | Export-Csv -Path "C:\output.csv" -NoTypeInformation -Encoding UTF8
注意:将代码中的
Content替换为CSV中存储HTML混杂字符串的列名
通用正则规则说明
所有方案使用的正则[A-Z][a-z]+(?: [A-Z][a-z]+)+:
[A-Z][a-z]+:匹配首字母大写、后续小写的单个单词(?: [A-Z][a-z]+)+:匹配一个或多个「空格+首字母大写单词」的组合,支持复姓或中间带空格的姓名格式
内容的提问来源于stack exchange,提问作者SamAllium
相关产品推荐
相关产品推荐

