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

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

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


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

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


请教各位大神,如何作这个正则匹配?先谢谢了。
...全文
2362 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,785

社区成员

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

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