以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]正则提取单元格字符串  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=115874)

--  作者:天一生水
--  发布时间: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

 


--  作者:有点甜
--  发布时间:2018/3/15 22:17:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:正则提取单元格1.foxdb


--  作者:天一生水
--  发布时间:2018/3/15 22:54:00
--  

谢谢甜老师!

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

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

--  作者:有点甜
--  发布时间: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


--  作者:天一生水
--  发布时间: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
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间: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("@")


--  作者:天一生水
--  发布时间:2018/3/16 15:07:00
--  

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

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

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

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

 

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

 

 

 

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

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

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

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

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


 


--  作者:有点甜
--  发布时间:2018/3/16 15:15:00
--  

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

 

2、上传实例说明问题。


--  作者:天一生水
--  发布时间:2018/3/16 16:14:00
--  

老师请看实例。

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

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

 

  

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

 


 

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


--  作者:有点甜
--  发布时间: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