Excel非结构化文本中润滑油名称与用量提取方案咨询
Excel杂乱文本中提取润滑油名称及用量的解决方案
一、公式组合法(无VBA权限时优先用)
1. 基于油名列表提取
先在辅助列(比如B列)整理所有可能的润滑油名称(如15W-40、Diesel Exhaust Fluid),然后用以下公式拼接结果(假设源数据在A1):
=LOOKUP(2^15,SEARCH($B$1:$B$10,A1),$B$1:$B$10)&" @ "&TRIM(MID(A1,SEARCH("[0-9.]",A1),LEN(A1)-SEARCH("[0-9.]",A1)+1))
LOOKUP部分:从油名列表中匹配A1里的油名MID部分:提取从第一个数字/小数点开始到文本末尾的内容(包含用量和备注)
2. 无油名列表时的正则思路
用FILTERXML模拟正则提取,适配常见格式:
=TEXTJOIN(" @ ",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[starts-with(.,'15W') or starts-with(.,'Diesel') or contains(.,'gallons')]"))
需要根据实际油名前缀调整starts-with的条件,确保覆盖所有目标油名。
二、VBA自定义函数(灵活适配复杂格式)
按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:
Function ExtractLubeInfo(inputText As String, Optional oilList As Range) As String Dim regEx As Object, matches As Object Dim oilName As String, quantity As String Set regEx = CreateObject("VBScript.RegExp") ' 匹配数字+gallons及后续备注 regEx.Pattern = "(\d+\.?\d*)\s*gallons.*" If regEx.Test(inputText) Then Set matches = regEx.Execute(inputText) quantity = matches(0).SubMatches(0) & " gallons" & Mid(inputText, matches(0).FirstIndex + matches(0).Length) End If ' 优先从油名列表匹配 If Not oilList Is Nothing Then For Each cell In oilList If InStr(inputText, cell.Value) > 0 Then oilName = cell.Value: Exit For End If Next Else ' 无列表时匹配常见油名格式 regEx.Pattern = "^([A-Za-z0-9- ]+?)(?=\s+\d)" If regEx.Test(inputText) Then oilName = Trim(regEx.Execute(inputText)(0).SubMatches(0)) End If ExtractLubeInfo = IIf(oilName <> "" And quantity <> "", oilName & " @ " & quantity, "未匹配有效信息") End Function
使用示例:
- 带油名列表:
=ExtractLubeInfo(A1,$B$1:$B$10) - 无油名列表:
=ExtractLubeInfo(A1)
三、Power Query批量处理(适合大数据集)
- 选中源数据列,点击【数据】→【从表格/区域】导入Power Query编辑器
- 添加自定义列,粘贴以下M语言公式(替换
YourColumnName为实际列名):
let input = [YourColumnName], numPos = Text.PositionOfAny(input, {"0".."9"}), quantity = Text.Trim(Text.Middle(input, numPos, Text.Length(input) - numPos)), oilName = Text.Trim(Text.BeforeDelimiter(input, Text.Start(quantity, 1))), result = oilName & " @ " & quantity in result
- 点击【关闭并上载】,即可生成标准化后的数据集。
内容的提问来源于stack exchange,提问作者cswift404
相关产品推荐
相关产品推荐

