Foxtable(狐表)用户栏目专家坐堂 → 关于字段数据分割


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

主题:关于字段数据分割

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 9:09:00 [显示全部帖子]


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 10:15:00 [显示全部帖子]

Dim str As String = "福建省泉州市惠安县山霞镇田边村委会159号"
'Dim str As String = "上海市aa区bb街cc路xx号"
Dim ary() As String = {"^", "(省|市|自治区)", "(市|区)", "县", "(镇|街)", "(村|会)", "$"}
Dim nr = Tables("表a").addnew
For i As Integer = 0 To 5
    For j As Integer = i To 0 Step -1
        Dim mc = System.Text.RegularExpressions.Regex.Match(str, "(?<=" & ary(j) & ").+" & ary(i+1))
        If mc.success Then
'            msgbox(ary(i+1) & ":" & mc.value)
            If i=0 Then
                nr("第一列") = mc.value.remove(mc.value.length-1)
            End If
            If i=1 Then
                nr("第二列") = mc.value.remove(mc.value.length-1)
            End If
            Exit For
        End If
    Next
Next


 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 10:38:00 [显示全部帖子]

请举例说明你的问题,输入什么字符,最后输出什么字符?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 11:18:00 [显示全部帖子]

 

你这种没有省、市分割的,无法直接提取。必须要做一个【省市区】的表,然后循环每一行,判断你的地址是否包含那些省、市、区,这样获取才行。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 11:30:00 [显示全部帖子]

Dim str As String = "福建省泉州市惠安县山霞镇田边村委会159号"
'Dim str As String = "上海市aa区bb街cc路xx号"
Dim ary() As String = {"^", "(省|上海市|北京市|重庆市|天津市|自治区)", "(市|区)", "县", "(镇|街)", "(村)", "$"}
Dim nr = Tables("表a").addnew
For i As Integer = 0 To 5
    For j As Integer = i To 0 Step -1
        Dim mc = System.Text.RegularExpressions.Regex.Match(str, "(?<=" & ary(j) & ").+" & ary(i+1))
        If mc.success Then
            msgbox(ary(i+1) & ":" & mc.value.remove(mc.value.length-1))
            If i=0 Then
                nr("第一列") = mc.value.remove(mc.value.length-1)
            End If
            If i=1 Then
                nr("第二列") = mc.value.remove(mc.value.length-1)
            End If
            Exit For
        End If
    Next
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 15:07:00 [显示全部帖子]

参考代码

 


Dim str As String = "河北省石家庄市裕华区翟营南大街385号卓达书香园2区583号楼50单元501室"
'Dim str As String = "上海市aa区bb街cc路xx号"
Dim ary() As String = {"^", "(省|上海市|北京市|重庆市|天津市|自治区)", "(市|区)", "县", "(镇|街)", "(村)", "$"}

Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(.*?省|上海市|北京市|重庆市|天津市|自治区)(.*?市|区)(.*?区|县)")
msgbox(mc(0).groups(0).value)
msgbox(mc(0).groups(1).value)
msgbox(mc(0).groups(2).value)
msgbox(mc(0).groups(3).value)

msgbox(str.Replace(mc(0).groups(0).value, ""))

 

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 10:24:00 [显示全部帖子]

具体实例发上来测试。14楼代码我测试没问题。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 15:53:00 [显示全部帖子]

1、没有省市区镇这样的地址,无法直接划分提取的。

 

2、修改代码

 

Dim dt1 As DataTable = DataTables("发货地址")
For Each dr As DataRow In dt1.Select("")
    Dim str As String = dr("地址")
    Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(.*?省|上海市|北京市|重庆市|天津市|自治区)(.*?市|区)(.*?区|县)")
    If mc.count > 0 Then
        If mc(0).groups.count >= 2 Then
            dr("省") = mc(0).groups(1).value
        End If
        If mc(0).groups.count >= 3 Then
            dr("市") = mc(0).groups(2).value
        End If
        If mc(0).groups.count >= 4 Then
            dr("区") = mc(0).groups(3).value
        End If
        dr("具体地址") = str.Replace(mc(0).groups(0).value, "")
    Else
        dr("具体地址") = str
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 17:27:00 [显示全部帖子]

参考

 

Dim dt1 As DataTable = DataTables("发货地址")
Dim ary() As String = {"(.*?省)(.*?市)(.*?区)", "(.*?省)(.*?市)(.*?县)", "(.*?市)(.*?区)"}

For Each dr As DataRow In dt1.Select("")
    Dim str As String = dr("地址")
    For Each s As String In ary
        Dim mc = System.Text.RegularExpressions.Regex.Matches(str, s)
        If mc.count > 0 Then
            If mc(0).groups.count >= 2 Then
                dr("省") = mc(0).groups(1).value
            End If
            If mc(0).groups.count >= 3 Then
                dr("市") = mc(0).groups(2).value
            End If
            If mc(0).groups.count >= 4 Then
                dr("区") = mc(0).groups(3).value
            End If
            dr("具体地址") = str.Replace(mc(0).groups(0).value, "")
            Exit For
        Else
            dr("具体地址") = str
        End If
    Next
Next


 回到顶部