以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于有条件提取指字符串的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131425) |
||||
-- 作者:ZJZK2018 -- 发布时间:2019/2/25 21:32:00 -- 关于有条件提取指字符串的问题 在一个段落中可能有N个“招标控制价”,但“招标控制价” & “28168.7034” (数字)& “万元”或“元”,只有一组字符串是符合的,如何提取这个字符串?其他“最高限价”、"风险控制价"依次类推...... "招标控制价28168.7034万元已经相关职能部门告知性备案(其中甲供及暂列金额共计 0 万元)投标最高限价26760.2682万元,(本项目最高限价为招标控制价的 95% )风险控制价 23098.3368万元招标控制价综合单价将在招标文件工具中公布" |
||||
-- 作者:有点蓝 -- 发布时间:2019/2/25 22:03:00 -- 有什么规律,或者有什么规则可以提取需要的内容? |
||||
-- 作者:ZJZK2018 -- 发布时间:2019/2/25 22:22:00 -- 规律:“指定字符” + “金额” + “万元”,当三个条件均不为空时,根据指定字符提取“金额”,如“招标控制价28168.7034万元,根据指定字符“招标控制价”来提取金额“28168.7034”,否则不提取 [此贴子已经被作者于2019/2/25 22:22:28编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2019/2/25 22:52:00 -- Dim txt As String = "招标控制价28168.7034万元已经相关职能部门告知性备案(其中甲供及暂列金额共计 0 万元)投标最高限价26760.2682万元,(本项目最高限价为招标控制价的 95% )风险控制价 23098.3368万元招标控制价综合单价将在招标文件工具中公布" Dim pattern As String = "招标控制价[0-9 .]*万元|投标最高限价[0-9 .]*万元|风险控制价[0-9 .]*万元" Dim rgx = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) For Each match As System.Text.RegularExpressions.Match In rgx.Matches(txt) Output.Show(match.Value ) Next
|
||||
-- 作者:ZJZK2018 -- 发布时间:2019/2/26 13:24:00 -- 老师还有点问题: "招标控制价28168.7034万元"这个字符串有可能在"招标控制价"后面加":",("招标控制价:"),也可能没有。"万元"也有可能是"元"也有可能没有。各种情况如何加以判断?
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/26 14:44:00 -- Dim txt As String = "招标控制价:28168.7034万元已经相关职能部门告知性备案(其中甲供及暂列金额共计 0 万元)投标最高限价:26760.2682元,(本项目最高限价为招标控制价的 95% )风险控制价 23098.3368万元招标控制价综合单价将在招标文件工具中公布" Dim rgx = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) For Each match As System.Text.RegularExpressions.Match In rgx.Matches(txt) |
||||
-- 作者:ZJZK2018 -- 发布时间:2019/2/26 16:17:00 -- 老师下图重复提取数据如何调整,红色部份代码有问题? Dim txt As String = e.Form.Controls("TextBox1").value Dim pattern As String = "招标控制价.*?[0-9 .]*.*?元|投标最高限价.*?[0-9 .]*.*?元|风险控制价.*?[0-9 .]*.*?元|投标最低限价.*?[0-9 .]*.*?元" Dim rgx = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) For Each match As System.Text.RegularExpressions.Match In rgx.Matches(txt) msgbox(match.Value ) Dim tb1 As Table = Tables(e.Form.Name & "_Table1") For Each cr As Row In tb1.Rows If match.Value.Contains(cr("名称")) AndAlso cr.IsNull("名称") = False Then Dim str As String = match.Value Dim s As String = System.Text.RegularExpressions.Regex.Match(str,"[0-9.]+(?=.*?元+)").ToString() cr("值") = s End If Next Next 此主题相关图片如下:rrrr.png
[此贴子已经被作者于2019/2/26 16:32:39编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/26 16:51:00 -- Dim txt As String = e.Form.Controls("TextBox1").value Dim tb1 As Table = Tables(e.Form.Name & "_Table1") For Each cr As Row In tb1.Rows If cr.IsNull("名称") = False Then Dim s As String = System.Text.RegularExpressions.Regex.Match(txt, "(?<=" & cr("名称") & ".*?)[0-9 .]*(?=.*?元)").ToString() cr("值") = s End If Next |
||||
-- 作者:ZJZK2018 -- 发布时间:2019/2/26 17:19:00 -- 老师还有一个问题: 如果"招标控制价28168.7034万元"时乘10000,是元时为原值?如何处理?
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/26 17:27:00 -- Dim txt As String = e.Form.Controls("TextBox1").value Dim tb1 As Table = Tables(e.Form.Name & "_Table1") For Each cr As Row In tb1.Rows If cr.IsNull("名称") = False Then Dim s As String = System.Text.RegularExpressions.Regex.Match(txt, "(?<=" & cr("名称") & ".*?)[0-9 .]*.*?元").ToString() If s.contains("万") Then cr("值") = val(s) * 10000 Else cr("值") = val(s) End If End If Next |