Foxtable(狐表)用户栏目专家坐堂 → [求助]正则提取单元格字符串


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

主题:[求助]正则提取单元格字符串

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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
[求助]正则提取单元格字符串  发帖心情 Post By:2018/3/15 21:15:00 [只看该作者]

如图,将获取到单元格的文本信息再细化保存。

以被告的“单位名称”作为行的标志列,保存到“当事人信息表”。

如果在“当事人信息表”中没有找到提取的“单位名称”,就新增一行;找到了,就用新数据覆盖。

请老师帮助完善一下代码,谢谢!

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正则提取单元格1.foxdb


图片点击可在新窗口打开查看此主题相关图片如下:image 1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:image 2.jpg
图片点击可在新窗口打开查看

DataColChanged代码:

If e.DataCol.name = "诉讼参加人" Then
    Dim str As String = e.NewValue
    If str > "" Then
        Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=被告).*?(?=,)")   '提取被告单位名称
        Dim mc1 = System.Text.RegularExpressions.Regex.Matches(str, "")   '提取被告住所地
        Dim mc2 = System.Text.RegularExpressions.Regex.Matches(str, "")   '提取被告法定代表人
        Dim mc3 = System.Text.RegularExpressions.Regex.Matches(str, "")   '提取被告法定代表人的职务
        Dim mc4 = System.Text.RegularExpressions.Regex.Matches(str, "")   '提取被告委托代理人
        Dim mc5 = System.Text.RegularExpressions.Regex.Matches(str, "")   '提取被告委托代理人单位

       
        Dim dr = DataTables("当事人信息表").Find("[单位名称] = '" & mc & "'")      '到信息表去找
        If dr Is Nothing Then                                                  '没找到
            dr = DataTables("当事人信息表").AddNew                             '新新增
            dr("单位名称") = mc
            dr("住所地") = mc1
            dr("法定代表人") = mc2
            dr("职务") = mc3
            dr("委托代理人1") = mc4
            dr("代理人单位1") = mc5
        Else                                                                  '如果找到了,就取当前值,覆盖更新           
            dr("单位名称") = mc
            dr("住所地") = mc1
            dr("法定代表人") = mc2
            dr("职务") = mc3
            dr("委托代理人1") = mc4
            dr("代理人单位1") = mc5
        End If
    End If
End If

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/15 22:17:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正则提取单元格1.foxdb


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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/3/15 22:54:00 [只看该作者]

谢谢甜老师!

但是第二组“委托代理人”没有提取出来。相同的“单位名称”也没有覆盖。

[此贴子已经被作者于2018/3/15 23:03:08编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/15 23:34:00 [只看该作者]

1、相同的单位名称肯定覆盖;例子没问题。

 

2、第二组代理人修改代码

 

'''
If e.DataCol.name = "诉讼参加人" Then
    Dim str As String = e.NewValue
    If str > "" Then
        Dim ary() As String = str.Replace("被告", "@").split("@")
        For i As Integer = 0 To ary.length-1
            str = ary(i)
            If str > "" Then
                msgbox(str)
                Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=^).*?(?=。)")   '提取被告单位名称
                Dim mc1 = System.Text.RegularExpressions.Regex.Matches(str, "(?<=法定代表人).*?(?=。)")   '提取被告法定代表人
                Dim mc2 = System.Text.RegularExpressions.Regex.Matches(str, "(?<=委托代理人).*?(?=。)")   '提取被告委托代理人
               
                Dim s As String = mc(0).value
                Dim dr = DataTables("当事人信息表").Find("[单位名称] = '" & s.split(",")(0) & "'")      '到信息表去找
                If dr Is Nothing Then
                    dr = DataTables("当事人信息表").AddNew
                End If
               
                dr("单位名称") = s.split(",")(0)
                dr("住所地") = s.split(",")(1)
                s = mc1(0).value
                dr("法定代表人") = s.split(",")(0)
                dr("职务") = s.split(",")(1)
                s = mc2(0).value
                dr("委托代理人1") = s.split(",")(0)
                dr("代理人单位1") = s.split(",")(1)
                s = mc2(1).value
                dr("委托代理人2") = s.split(",")(0)
                dr("代理人单位2") = s.split(",")(1)
            End If
        Next
       
    End If
End If


 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/3/16 11:45:00 [只看该作者]

甜老师好!

再问两个问题:

1、当单元格原始信息只有一个“委托代理人”或没有时,会报错,见下图;

 

2、到二审阶段时,原始信息中的“原告”变为下列两种情况:

 

上诉人(一审被告)

被上诉人(一审被告)

这两句代码怎样修改?

 

谢谢!

...

Dim ary() As String = str.Replace("被告", "@").split("@")
......

 

Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=^).*?(?=。)") '提取被告单位名称

 

 
图片点击可在新窗口打开查看此主题相关图片如下:image 1.jpg
图片点击可在新窗口打开查看


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/16 11:59:00 [只看该作者]

1、判断一下

 

If mc2.count >= 2 then

    s = mc2(1).value
    dr("委托代理人2") = s.split(",")(0)
    dr("代理人单位2") = s.split(",")(1)

End If

 

2、

 

Dim ary() As String = str.Replace("被告", "@").split("@")

 

改成

 

Dim ary() As String = str.Replace("上诉人(一审被告)", "@").replace("上诉人(一审被告)", "@").split("@")


 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/3/16 15:07:00 [只看该作者]

1、两个“委托代理人”或没有的,正确;

只有一个“委托代理人”,提取不出来委托代理人,但不报错。是这种情况:

----------------------

被告高新技术产业开发区管理委员会,住所地市工业南路28号。
法定代表人王志,主任。
委托代理人贵宾,高新技术产业开发区管理委员会工作人员。
被告市公安局高新技术产业开发区分局,住所地市高新区康虹路1号。
法定代表人刘庆,局长。
委托代理人李1,市槐荫区人民政府工作人员。

 

=========================================

 

 

 

2、需要同时匹配:上诉人(一审被告)或 上诉人(一审被告)

出现“”的时候,报错。是这种情况:

----------------------

被上诉人(一审被告)高新技术产业开发区管理委员会,住所地市工业南路28号。
法定代表人王志,主任。
委托代理人贵宾,高新技术产业开发区管理委员会工作人员。

----------------------


 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/16 15:15:00 [只看该作者]

1、第一个委托人,属于【高新技术产业开发区管理委员会】的;第二个委托人,属于【市公安局高新技术产业开发区分局】的,分别是各自【第一个委托人】

 

2、上传实例说明问题。


 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/3/16 16:14:00 [只看该作者]

老师请看实例。

第一个测试首字符:“被告”;

第二个测试首字符:“上诉人(一审被告)”或 “被上诉人(一审被告)”。

 

  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正则提取单元格1-测试被告.foxdb

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正则提取单元格1-测试(被)上诉人.foxdb


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/16 16:51:00 [只看该作者]

'''
If e.DataCol.name = "诉讼参加人" Then
    Dim str As String = e.NewValue
    If str > "" Then
        Dim ary() As String = str.Replace("被上诉人(一审被告)", "@").replace("上诉人(一审被告)", "@").split("@")
       
        For i As Integer = 0 To ary.length-1
            str = ary(i)
            If str > "" Then
                'msgbox(str)
                Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=^).*?(?=。)")   '提取被告单位名称
                Dim mc1 = System.Text.RegularExpressions.Regex.Matches(str, "(?<=法定代表人).*?(?=。)")   '提取被告法定代表人
                Dim mc2 = System.Text.RegularExpressions.Regex.Matches(str, "(?<=委托代理人).*?(?=。)")   '提取被告委托代理人
               
                Dim s As String = mc(0).value
                Dim dr = DataTables("当事人信息表").Find("[单位名称] = '" & s.split(",")(0) & "'")      '到信息表去找
                If dr Is Nothing Then
                    dr = DataTables("当事人信息表").AddNew
                End If
               
                dr("单位名称") = s.split(",")(0)
                dr("住所地") = s.split(",")(1)
                s = mc1(0).value
                dr("法定代表人") = s.split(",")(0)
                dr("职务") = s.split(",")(1)
               
                If mc2.count >= 1 Then
                    s = mc2(0).value
                    dr("委托代理人1") = s.split(",")(0)
                    dr("代理人单位1") = s.split(",")(1)
                End If
                If mc2.count >= 2 Then
                    s = mc2(1).value
                    dr("委托代理人2") = s.split(",")(0)
                    dr("代理人单位2") = s.split(",")(1)
                End If
               
               
                dr("更新时间") = Date.now
               
            End If
        Next
       
    End If
End If

 回到顶部