以文本方式查看主题

-  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 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 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
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:提取数据.table



图片点击可在新窗口打开查看此主题相关图片如下:eee.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