回复 10楼 王咸美
可以编程取出网页的数据再写入DBF,不用这样转来转去转到头都晕。[此贴子已经被作者于2025-10-19 17:00编辑过]

程序代码:CLEAR
* 测试不同的文本格式
LOCAL lcTestText
lcTestText = "快递费8.车费8.36 住宿费180,餐费-60 10月8日 车费8.36 住宿费180元,餐费60.63元"
DO EnhancedRegExpExtract WITH lcTestText
* 增强版正则表达式提取
PROCEDURE EnhancedRegExpExtract(tcString)
LOCAL loRegEx, laMatches, loMatch
LOCAL lcPattern
* 更强大的正则表达式模式
lcPattern = "(" + ;
"车费|餐费|住宿费|快递费|交通费|水电费|电话费|网络费|办公费|" + ;
"材料费|印刷费|差旅费|会议费|培训费|招待费|福利费|其他" + ;
")" + ;
"[::,.、\s]*" + ; && 各种可能的分隔符
"(-?\d+(?:\.\d+)?)" + ; && 金额
"(?:元)?" && 可选的单位
loRegEx = CREATEOBJECT("VBScript.RegExp")
loRegEx.Pattern = lcPattern
loRegEx.Global = .T.
CREATE CURSOR 提取结果 (原始文本 C(100), 费用名称 C(10), 金额 N(10,2), 匹配位置 I)
laMatches = loRegEx.Execute(tcString)
? "增强版正则表达式提取:" + CHR(13) + CHR(10)
? "输入文本: " + tcString + CHR(13) + CHR(10)
? "----------------------------------------"
FOR EACH loMatch IN laMatches
IF loMatch.SubMatches.Count >= 2
lcExpenseName = loMatch.SubMatches(0)
lcAmount = loMatch.SubMatches(1)
INSERT INTO 提取结果 VALUES ;
(loMatch.Value, lcExpenseName, VAL(lcAmount), loMatch.FirstIndex)
? "匹配文本: " + loMatch.Value
? "费用名称: " + lcExpenseName + " 金额: " + lcAmount
? "---"
ENDIF
ENDFOR
SELECT 提取结果
BROWSE TITLE "增强版正则表达式提取结果"
* 按费用名称汇总
SELECT 费用名称, SUM(金额) as 总金额, COUNT(*) as 出现次数 ;
FROM 提取结果 ;
GROUP BY 费用名称 ;
ORDER BY 总金额 DESC
BROWSE TITLE "费用汇总统计"
ENDPROC