Foxtable(狐表)用户栏目专家坐堂 → 关于有条件提取指字符串的问题


  共有2819人关注过本帖树形打印复制链接

主题:关于有条件提取指字符串的问题

帅哥哟,离线,有人找我吗?
ZJZK2018
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
关于有条件提取指字符串的问题  发帖心情 Post By:2019/2/25 21:32:00 [只看该作者]

在一个段落中可能有N个“招标控制价”,但“招标控制价” & “28168.7034” (数字)& “万元”或“元”,只有一组字符串是符合的,如何提取这个字符串?其他“最高限价”、"风险控制价"依次类推......


"招标控制价28168.7034万元已经相关职能部门告知性备案(其中甲供及暂列金额共计 0 万元)投标最高限价26760.2682万元,(本项目最高限价为招标控制价的 95% 风险控制价 23098.3368万元招标控制价综合单价将在招标文件工具中公布"


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/25 22:03:00 [只看该作者]

有什么规律,或者有什么规则可以提取需要的内容?

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2019/2/25 22:22:00 [只看该作者]

规律:“指定字符” + “金额” + “万元”,当三个条件均不为空时,根据指定字符提取“金额”,如“招标控制价28168.7034万元,根据指定字符“招标控制价”来提取金额“28168.7034”,否则不提取

[此贴子已经被作者于2019/2/25 22:22:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2019/2/26 13:24:00 [只看该作者]

老师还有点问题:
"招标控制价28168.7034万元"这个字符串有可能在"招标控制价"后面加":",("招标控制价:"),也可能没有。"万元"也有可能是"元"也有可能没有。各种情况如何加以判断?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2019/2/26 17:19:00 [只看该作者]

老师还有一个问题:
如果"招标控制价28168.7034万元"时乘10000,是时为原值?如何处理?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部