正则表达式如何匹配除指定的几个汉字之外的所有汉字?

Carlven2012 2016-11-21 05:13:57
如题 ,有一组如下客户数据:

陈永娥 13325357396
卢欢 郑盈
已确定__李王琴 1__李王琴
已确定__陈炳树 周旭洪__陈炳树 周旭洪
已确定__薛常鹏 周玲 58__薛常鹏 周玲 58
已确定_12678_张思为 彭碧霞
已确定_白翔翰 张英男_白翔翰 张英男


现要求提取出其中的客户名称,不要重复,提取出来的结果应该如下:

陈永娥
卢欢 郑盈
李王琴
陈炳树 周旭洪
薛常鹏 周玲
张思为 彭碧霞
白翔翰 张英男


请教各位大神,如何作这个正则匹配?先谢谢了。
...全文
2393 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Carlven2012 2016-12-21
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
检查输入格式 这个功能可以让程序员永不失业!
谢谢哥。这其实是我们工作人员以前的习惯及历史遗留问题。我只是不想麻烦手动去一个个纠正,想用程序一键更正用户名啦!
赵4老师 2016-11-24
  • 打赏
  • 举报
回复
检查输入格式 这个功能可以让程序员永不失业!
舉杯邀明月 2016-11-23
  • 打赏
  • 举报
回复
你这个用“非贪心匹配”还是可以实现“提取姓名”。 因为你的这个姓名与姓名之间总会有“非汉字”的内容来分隔。 我以前处理过的一个报表,这种方式就不行了。 因这她们在输入姓名的时候,有可能会把几个人的名字直接输入在一起、没有任何分隔! 只能按“标准姓名表”进行“贪心匹配”才行。
Carlven2012 2016-11-23
  • 打赏
  • 举报
回复
已搞定!用了?!非贪心匹配!
舉杯邀明月 2016-11-22
  • 打赏
  • 举报
回复
你这“重复”还有歧义呢! 是指“同一条中”不出现重复的名字, 还是指“所有记录项中”都不出现重复名字? 你的这个“举例”并没有表明这个问题。 比如第2条中出现了“郑盈”这个名字, 如果之后的某条记录中也出现了“郑盈”,那么这个算是重复了呢,还是不算重复………… 假设情况: 1. 第2条是“卢欢 郑盈”,后面某记录出现的是“张三、 郑盈”; 2. 第2条是“卢欢 郑盈”,后面又出现了某记录,仍然只包含“卢欢 、郑盈”二人(当然没有这种情况就不考虑了)。
赵4老师 2016-11-22
  • 打赏
  • 举报
回复
Dictionary 对象 描述 对象,用于存储数据关键字和条目对。 语法 Scripting.Dictionary 说明 Dictionary 对象与 PERL 关联数组等价。可以是任何形式的数据的条目被存储在数组中。每个条目都与一个唯一的关键字相关联。该关键字用来检索单个条目,通常是整数或字符串,可以是除数组外的任何类型。 下面的代码举例说明了如何创建一个 Dictionary 对象: Dim d '创建一个变量 Set d = CreateObject(Scripting.Dictionary) d.Add "a", "Athens" '添加一些关键字和条目 d.Add "b", "Belgrade" d.Add "c", "Cairo" ...
赵4老师 2016-11-22
  • 打赏
  • 举报
回复
排除重复可以借助字典容器。
of123 2016-11-22
  • 打赏
  • 举报
回复
用代码可以实现。如果不是正则表达式的作业的话。
Private Declare Function SendMessagebyString Lib _
"user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As Long

Private Const LB_FINDSTRINGEXACT = &H1A2

Private Sub Command1_Click()
    Dim i As Integer, j As Integer
    Dim strData As String, strTmp As String
    Dim strLine() As String, strItem() As String
    
    strData = "陈永娥 13325357396"  &  vbCrLf  & _
              "卢欢  郑盈"  &  vbCrLf  & _
              "已确定__李王琴 1__李王琴"  &  vbCrLf  & _
              "已确定__陈炳树 周旭洪__陈炳树 周旭洪"  &  vbCrLf  & _
              "已确定__薛常鹏 周玲 58__薛常鹏 周玲 58"  &  vbCrLf  & _
              "已确定_12678_张思为    彭碧霞"  &  vbCrLf  & _
              "已确定_白翔翰 张英男_白翔翰 张英男"

    strData = Replace(strData, "已确定_", "")
    strData = Replace(strData, "_", " ")
    strData = Replace(strData, vbCrLf & " ", vbCrLf)
    
    For i = 1 To Len(strData)
        If Asc(Mid(strData, i, 1)) < 0 Or Mid(strData, i, 1) = Space(1) Or Mid(strData, i, 1) = vbCr Or Mid(strData, i, 1) = vbLf Then
            strTmp = strTmp & Mid(strData, i, 1)
        End If
    Next i
    
    Do While InStr(strTmp, Space(2))
        strTmp = Replace(strTmp, Space(2), Space(1))
    Loop
    
    List1.Clear
    strLine = Split(strTmp, vbCrLf)
    For i = 0 To UBound(strLine)
        strItem = Split(strLine(i), Space(1))
        
        For j = 0 To UBound(strItem)
            If -1 = SendMessagebyString(List1.hWND, LB_FINDSTRINGEXACT, -1, Trim(strItem(j))) Then
                List1.AddItem Trim(strItem(j))
                List1.ItemData(List1.NewIndex) = i
            End If
        Next j
    Next i
    
    ReDim strItem(UBound(strLine))
    
    For i = 0 To List1.ListCount - 1
        If List1.List(i) > "" Then strItem(List1.ItemData(i)) = strItem(List1.ItemData(i)) & List1.List(i) & " "
    Next i
    
    List2.Clear
    For i = 0 To UBound(strItem)
        List2.AddItem strItem(i)
    Next i
End Sub
无·法 2016-11-22
  • 打赏
  • 举报
回复
上面分两个问题,提取是一个问题,排除重复是一个问题。 前面的帮你解决了,后面的是非常基础的问题了,如果这都懒得弄倒不如花人民币雇人弄了
Carlven2012 2016-11-21
  • 打赏
  • 举报
回复
引用 2 楼 sysdzw 的回复:
'此代码由“VB正则测试代码自动化生成工具V1.1.43”自动生成,请直接调用TestReg过程
Private Sub TestReg()
    Dim strData As String
    Dim reg As Object
    strData = "陈永娥 13325357396"  &  vbCrLf  & _
              "卢欢  郑盈"  &  vbCrLf  & _
              "已确定__李王琴 1__李王琴"  &  vbCrLf  & _
              "已确定__陈炳树 周旭洪__陈炳树 周旭洪"  &  vbCrLf  & _
              "已确定__薛常鹏 周玲 58__薛常鹏 周玲 58"  &  vbCrLf  & _
              "已确定_12678_张思为    彭碧霞"  &  vbCrLf  & _
              "已确定_白翔翰 张英男_白翔翰 张英男"
    Set reg = CreateObject("vbscript.regExp")
    reg.Global = True
    reg.IgnoreCase = True
    reg.MultiLine = True
    reg.Pattern = "[^\u4e00-\u9fa5\r\n ]|已确定"
    Debug.Print reg.Replace(strData, " ")
End Sub
谢谢版主,可能你没理解到我的问题,我只是列举了一些客户数据的例子,是想说明遇到的数据会是哪些样式。 我只是想得到一个公式,能够把上面每条数据代入,都可以直接提取出客户姓名这样! 还有的情况是:数据可能就3个字、2个字就已经是客户的姓名了。 而且你这这个表达式出来还有重复的,也不是我想要的。但是还是谢谢你的方法,我再看看如何改进。
无·法 2016-11-21
  • 打赏
  • 举报
回复
'此代码由“VB正则测试代码自动化生成工具V1.1.43”自动生成,请直接调用TestReg过程
Private Sub TestReg()
Dim strData As String
Dim reg As Object
strData = "陈永娥 13325357396" & vbCrLf & _
"卢欢 郑盈" & vbCrLf & _
"已确定__李王琴 1__李王琴" & vbCrLf & _
"已确定__陈炳树 周旭洪__陈炳树 周旭洪" & vbCrLf & _
"已确定__薛常鹏 周玲 58__薛常鹏 周玲 58" & vbCrLf & _
"已确定_12678_张思为 彭碧霞" & vbCrLf & _
"已确定_白翔翰 张英男_白翔翰 张英男"
Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.IgnoreCase = True
reg.MultiLine = True
reg.Pattern = "[^\u4e00-\u9fa5\r\n ]|已确定"
Debug.Print reg.Replace(strData, " ")
End Sub
lshhjxlj 2016-11-21
  • 打赏
  • 举报
回复
联系我微信:lshhjx,我来给你搞定。

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧