以文本方式查看主题 - 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 -- [求助]正则提取单元格字符串 如图,将获取到单元格的文本信息再细化保存。 以被告的“单位名称”作为行的标志列,保存到“当事人信息表”。 如果在“当事人信息表”中没有找到提取的“单位名称”,就新增一行;找到了,就用新数据覆盖。 请老师帮助完善一下代码,谢谢!
![]() ![]() ![]() ![]() DataColChanged代码: If e.DataCol.name = "诉讼参加人" Then
|
||||||||
-- 作者:有点甜 -- 发布时间:2018/3/15 22:17:00 --
|
||||||||
-- 作者:天一生水 -- 发布时间:2018/3/15 22:54:00 -- 谢谢甜老师! 但是第二组“委托代理人”没有提取出来。相同的“单位名称”也没有覆盖。 [此贴子已经被作者于2018/3/15 23:03:08编辑过]
|
||||||||
-- 作者:有点甜 -- 发布时间:2018/3/15 23:34:00 -- 1、相同的单位名称肯定覆盖;例子没问题。
2、第二组代理人修改代码
\'\'\' |
||||||||
-- 作者:天一生水 -- 发布时间:2018/3/16 11:45:00 -- 甜老师好! 再问两个问题: 1、当单元格原始信息只有一个“委托代理人”或没有时,会报错,见下图;
2、到二审阶段时,原始信息中的“原告”变为下列两种情况:
上诉人(一审被告) 或 被上诉人(一审被告) 这两句代码怎样修改?
谢谢! ... Dim ary() As String = str.Replace("被告", "@").split("@")
Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=^).*?(?=。)") \'提取被告单位名称
|
||||||||
-- 作者:有点甜 -- 发布时间:2018/3/16 11:59:00 -- 1、判断一下
If mc2.count >= 2 then s = mc2(1).value 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号。
=========================================
2、需要同时匹配:上诉人(一审被告)或 被上诉人(一审被告) 出现“被”的时候,报错。是这种情况: ---------------------- 被上诉人(一审被告)高新技术产业开发区管理委员会,住所地市工业南路28号。 ----------------------
|
||||||||
-- 作者:有点甜 -- 发布时间:2018/3/16 15:15:00 -- 1、第一个委托人,属于【高新技术产业开发区管理委员会】的;第二个委托人,属于【市公安局高新技术产业开发区分局】的,分别是各自【第一个委托人】
2、上传实例说明问题。 |
||||||||
-- 作者:天一生水 -- 发布时间:2018/3/16 16:14:00 -- 老师请看实例。 第一个测试首字符:“被告”; 第二个测试首字符:“上诉人(一审被告)”或 “被上诉人(一审被告)”。
|
||||||||
-- 作者:有点甜 -- 发布时间: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 |