精华内容
下载资源
问答
  • EXCEL 正则表达式

    千次阅读 2010-04-18 23:58:00
    正则表达式是基于文本的编辑器和搜索工具的一个...像MS Excel,仅支持简单的通配符查找替换。VBA中没有正则表达式对象,要使用正则表达式的话,我们需要在引用里添加Microsoft VBScript Regular Expression 5.5动态库

    正则表达式是基于文本的编辑器和搜索工具的一个重要部分,传统的?和*方法十分有限。正则表达式在数据有效性验证、替换文本、提取子字符串有很好的应用。 不同的程序或语言对正则表达式的支持是不一样的。像MS Excel,仅支持简单的通配符查找和替换。VBA中没有正则表达式对象,要使用正则表达式的话,我们需要在引用里添加Microsoft VBScript Regular Expression 5.5动态库。VBScript的正则表达式支持向前查找(包括肯定式和否定式),支持分组和非分组(仅捕获位置),但不支持向后查找。 下面是一个简单的例子: Sub RegExMatch() Dim regEx as RegExp Dim aMatch as Match Dim Matches as MatchCollection dim patrn as String ' 搜索模式 Dim strng as String Dim RetStr as String patrn="is." strng="IS1 is2 IS3 is4" Set regEx=new RegExp regEx.Pattern=patrn regEx.IgnoreCase=True regEx.Global=True Set Matches=regEx.Execute(strng) For Each aMatch in Matches RetStr=RetStr & "Match found at position " RetStr=RetStr & aMatch.FirstIndex & ". Match Value is '" RetStr=RetStr & aMatch.Value & "'." & vbCrLf Next MsgBox RetStr End Sub 也可以使用后绑定的方法。 Dim regEx As Object Set regEx = CreateObject("VBSCRIPT.REGEXP") RegEx对象的属性和方法属性 Global 设置或返回一个 Boolean 值, 该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个. 缺省为False. IgnoreCase 设置或返回一个Boolean值, 指明模式搜索是否区分大小写. 缺省为False. Pattern 设置或返回被搜索的正则表达式模式. 方法 Test 对指定的字符串执行一个正则表达式搜索, 并返回一个 Boolean 值指示是否找到匹配的模式. object.Test(string) Execute 对指定的字符串执行正则表达式搜索. object.Execute(string) Replace 替换在正则表达式查找中找到的文本. object.Replace(string1, string2) string1是将要进行文本替换的字符串, string2是替换文本字符串. Matches集合和它所包含的Match对象,只能由上面的Execute方法来返回。每个Match对象包括三个属性。 FirstIndex - 匹配项中第一个字符的位置 Length - 匹配项的长度 Value - 匹配项的值 当匹配模式中包含分组的话,Match对象还会包含一个SubMatches集合,也就是$1、$2等等。 关于正则表达式网络上已经有很多的资料,可以Google一下关键字。这里主要将一下分组、反向引用和向前查找。 分组,非捕获分组,反向引用正则表达式模式中使用圆括号对字符进行分组,并保存匹配的文本,被匹配的内容指定给变量$1、$2等等。捕获组的编号有圆开括号在正则表达式模式中的位置决定。使用嵌套的圆括号时,同样的规则也适用。VBScript中不支持命名的分组。 VBScript支持非捕获圆括号(?:the-non-captured-content)。非捕获分组匹配的内容不指定给变量$1等。 非捕获分组使模式看起来更加复杂,但能减少要处理的组数,因此编程会更容易一些,同时也可以提升效率。 有关捕获圆括号的常见用法是将其用于反向引用。下面是摘自脚本帮助文件关于反向引用的介绍。 正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 ‘?:’, ‘?=’, or ‘?!’ 来忽略对这部分正则表达式的保存。 所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 ‘/n’ 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。 向后引用一个最简单,最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。请看下面的句子: Is is the cost of of gasoline going up up? 根据所写内容,上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句子就好了。下面的 VBScript 正则表达式使用一个子表达式就可以实现这一功能。 “/b([a-z]+) /1/b” 在这个示例中,子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由’[a-z]+’ 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。’/1′用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样,则诸如 “is issued” 或 “this is” 这样的短语都会被该表达式不正确地识别。 使用上面所示的正则表达式,下面的 VBScript 代码可以使用子匹配信息,在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词: Dim ss, re, rv ss = "Is is the cost of of gasoline going up up?." & vbNewLine Set re = New RegExp re.Pattern = "/b([a-z]+) /1/b" re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,"$1") 请注意在 VBScript 代码中,全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。 在replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配,则可以用 $2, $3 等继续引用。 向前查找 VBScript支持向前查找,但不支持向后查找。向前查找包括肯定式向前查找和否定式向前查找。 向前查找根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或者不存在个特定的字符序列(否定式向前查找)来决定是否匹配。实际上,向前查找指的是一个子模式,这个子模式匹配特定的字符序列,但不返回匹配结果,所以也可以说向前查找子模式匹配的是测试文本中的位置。 例如要匹配States中的State,可以用 (?=States)State 或者用 State(?=s) 写了一个在Excel中的正则表达式工具,可以获得详细的匹配位置、内容和分组,并且可以获得替换内容。

    展开全文
  • Excel 中,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出出现右侧的代码编辑窗口 在代码窗口中输入以下代码: Private Sub RegExp_Replace() Dim RegExp...

    在 Excel 中,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出出现右侧的代码编辑窗口

    image

    在代码窗口中输入以下代码:


    Private Sub RegExp_Replace()
    
        Dim RegExp As Object
        Dim SearchRange As Range, Cell As Range
        
        '此处定义正则表达式
        Set RegExp = CreateObject("vbscript.regexp")
        RegExp.Pattern = "[0-9]{5}"
         
        '此处指定查找范围
        Set SearchRange = ActiveSheet.Range("A1:A99")
        
        '遍历查找范围内的单元格
        For Each Cell In SearchRange
            Set Matches = RegExp.Execute(Cell.Value)
            If Matches.Count >= 1 Then
                Set Match = Matches(0)
                Cell.Value = RegExp.Replace(Cell.Value, "")
            End If
        Next
    
    End Sub

    根据实际需要替换相应参数,点击 image 运行即可得到效果。


    如果 excel 提示该工程中的宏被禁止在 -》工具-》宏-》安全性-》中,然后关闭重新打开,会提示是否启用宏。选启用宏:


    如果您的EXECL2003宏被禁用,有以下几种解决办法

    • 利用EXCEL的宏安全性问题

    在菜单中选择:工具--选项--宏--安全性,设置成“低”或“中”,再打开文件,宏会提示使用“宏”,按“启动宏”打开文件。

    如果安全性调成中,打开EXCEL文档时就会提示是否加载宏。 
    如果安全性调成低,那么打开EXCEL文档时就直接加载宏。

    • 删除EXCEL模板(当第一个方法无法实现时使用)

    C:\Documents and Settings\你的用户名\Application Data\Microsoft\Excel\Excel11-模板删除.

    • 修改注册表实现(当第一个方法无法实现时使用)

    打开注册表编辑工具(regedit.exe),找到HKEY_LOCAL_MACHINE打开,找SOFTWARE打开,找Microsoft打开,找office打开,找11.0打开,找EXCEL打开,找security打开后看到它旁边的窗口有一项名称为LEVEL的,双击它,在跳出的编辑DWORD值里面看到数值数据(V):下面的空格啦,你就可以在里面修改数值啦。注意:填写1为低,填写2为中,填写3为高。

     

    office系统其他应用软件的宏禁用解决方法与此类似。




    展开全文
  • EXCEL表内遇到有规律性的数据需要提取或者替换时,比如在数据中提取时间,身份证号码等,EXCEL内自带的查找替换就难以实现,我们可以利用VBA适用正则表达式去对数据进行匹配。 什么是正则表达式? 正则表达式,...

    在EXCEL表内遇到有规律性的数据需要提取或者替换时,比如在数据中提取时间,身份证号码等,EXCEL内自带的查找替换就难以实现,我们可以利用VBA适用正则表达式去对数据进行匹配。

    什么是正则表达式?

    正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    下表为正则表达式的元字符和对它们的一个简短的描述,新手可以百度下看下教程,不建议死记硬背,多做练习后更容易懂。

    常用的正则表达式:

    匹配手机号码:1[3|4|5|7|8][0-9]{9}

    匹配身份证号(15位):\d{14}[[0-9],0-9xX] ;身份证号(18位):\d{17}(\d|X|x)

    匹配邮箱地址:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

    匹配(年-月-日)格式日期:([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))

    匹配3位以上数字:[1-9][0-9]{2,}

    匹配字符串之间的字符:前面的字符(.*?)后面的字符,比如abc123def ,需要匹配abc和def之间的字符的表达式就是abc(.*?)def

    在VBA使用正则表达式代码如下:

    Sub re()
    Application.ScreenUpdating = False
    Set oRegExp1 = CreateObject("vbscript.regexp")
    re = InputBox("请输入正则表达式")
    if re="" then exit sub
    With oRegExp1
        .Global = True
        .IgnoreCase = True
        .Pattern = re
    End With
    
    For Each Rng In Selection
        if Rng <>"" then
            Set a = oRegExp1.Execute(Rng)
            For j = 0 To a.Count - 1
    	    IF j=0 then
    	        b = a(j)
    	    else
           	        b = b & "," & a(j)
    	    end if
            Next
            Rng.Value = b
            b = ""
        end if
    Next
    Application.ScreenUpdating = true
    End Sub
    

    例如在下面的产品名称内需要提取TM-xxx这个型号,则正则表达式为:TM-[0-9]{3,} (TM-为开头字符串加上3个数字以上)

    选择需要提取的A列数据,运行VBA,在输入框内输入正则表达式,确认后就可以得到结果:

    结果如下:

    若有多个结果会以,号隔开放回结果。

    另:正则表达式在线测试平台:http://tool.oschina.net/regex/

    展开全文
  • Excel 中,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出出现右侧的代码编辑窗口 在代码窗口中输入以下代码: Private Sub RegExp_Replace() Dim RegExp ...

    在 Excel 中,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出出现右侧的代码编辑窗口

    image

    在代码窗口中输入以下代码:

    Private Sub RegExp_Replace()
    
        Dim RegExp As Object
        Dim SearchRange As Range, Cell As Range
        
        '此处定义正则表达式
        Set RegExp = CreateObject("vbscript.regexp")
        RegExp.Pattern = "[0-9]{5}"
         
        '此处指定查找范围
        Set SearchRange = ActiveSheet.Range("A1:A99")
        
        '遍历查找范围内的单元格
        For Each Cell In SearchRange
            Set Matches = RegExp.Execute(Cell.Value)
            If Matches.Count >= 1 Then
                Set Match = Matches(0)
                Cell.Value = RegExp.Replace(Cell.Value, "")
            End If
        Next
    
    End Sub
    

      根据实际需要替换相应参数,点击 image 运行即可得到效果。

    来源:https://www.cnblogs.com/xwgli/p/5845317.html

    转载于:https://www.cnblogs.com/fogwang/p/8359524.html

    展开全文
  • 在实际开发中经常使用对WORD/EXCEL及其他数据格式的整理,其中之一便是使用WORD中的查找替换功能整理数据。 对于最一般的查找替换功能相信各位都熟悉了,但是借助于WORD所支持的正则表达式,我们可以实现更复杂...
  • 在实际开发中经常使用对WORD/EXCEL及其他数据格式的整理,其中之一便是使用WORD中的查找替换功能整理数据。对于最一般的查找替换功能相信各位都熟悉了,但是借助于WORD所支持的正则表达式,我们可以实现更复杂和...
  • 利用正则表达式批量替换代码 在网页制作中有时需要从 Word 或 Excel 中复制些内容到DW 中如表格数据在Word 或 Excel 中复制表格时DW 会自动去除多余的代码以保持代码的简洁性但是有些定义 将会保留如表格中宽高的...
  • 在网页制作中有时需要从Word或Excel中复制些内容到DW中如表格数据在Word或Excel中复制表格时DW会自动去除多余的代码以保持代码的简洁性但是有些定义将会保留如表格中宽高的定义 利用DW查找替换中的使用正则表达式...
  • 在实际开发中经常使用对WORD/EXCEL及其他数据格式的整理,其中之一便是使用WORD中的查找替换功能整理数据。 对于最一般的查找替换功能相信各位都熟悉了,但是借助于WORD所支持的正则表达式,我们可以实现更复杂...
  • EXCEL VBA 正则表达式 从实例开始 所有代码都测试过 ' ' '[2011-09-09 '[2010-08-08 ' 数据验证经常出现的情况是需要验证和处理大量的文本 内容 有时候需要查找字符串 有时候要按条件替换 并且这些待处理的问题还是...

空空如也

空空如也

1 2 3 4 5 6
收藏数 109
精华内容 43
关键字:

excel正则查找替换