ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2210|回复: 16

麻烦用正则表达式处理,谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-19 09:21 | 显示全部楼层 |阅读模式
如附件。每行都有一些文字或是符号,但是我只想要在其右边一列显示从中提取的规范的车牌号。
也就是说要去除空格等其他符号或是无用文字,小写变成大写等处理。
如果该行中没有车牌号信息,那么其右列就空白就可以了。
而且有经常把“豫”写成“予”的,也要替换过来。

表格.rar

6.63 KB, 下载次数: 48

TA的精华主题

TA的得分主题

发表于 2015-5-19 09:53 | 显示全部楼层
  1. Sub test()
  2.     arr = Range(Range("a1"), Range("a65536").End(xlUp))
  3.     With CreateObject("vbscript.regexp")
  4.         .Pattern = "((?![一-龥]\w|\w+).)+"
  5.         .Global = True
  6.         For i = 1 To UBound(arr)
  7.             arr(i, 1) = UCase(.Replace(arr(i, 1), ""))
  8.         Next
  9.     End With
  10.     Range("b1").Resize(UBound(arr), 1) = arr
  11. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-19 10:36 | 显示全部楼层

大哥,能否帮忙写个匹配数学表达式的正则。能够匹配类似下面的表达式:

3+2=5
2/3+3×4=8
3a+2b=34-5c
(2+3a)/34^2y=5

TA的精华主题

TA的得分主题

发表于 2015-5-19 11:26 | 显示全部楼层
Moneky 发表于 2015-5-19 10:36
大哥,能否帮忙写个匹配数学表达式的正则。能够匹配类似下面的表达式:

3+2=5

正则表达式与匹配对象所处的字符串环境有很大关系. 环境简单正则可以用很简单的形式, 如果环境复杂即干扰字串多, 则需要更严格的正则. 不知兄弟情形如何?

TA的精华主题

TA的得分主题

发表于 2015-5-19 11:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liu-aguang 发表于 2015-5-19 11:26
正则表达式与匹配对象所处的字符串环境有很大关系. 环境简单正则可以用很简单的形式, 如果环境复杂即干扰 ...

我是在word中做一个自己用的宏,目前写了代码可以将新版的线性公式转化为专业公式的宏。现在想写个代码用来在文档写好后,一次性自动转化所有表达式,操作方式是,先选中表达式,然后执行原来的代码转化即可。但卡在了用正则表达式匹配数学表达式的地方。

我用的是VBScript.RegExp对象,我主要是小学和初中的表达式,没有十分复杂的,主要能够匹配小学阶段的表达式就够用了,主要是含有分数和括号,如:
3x+2(y+3)=8/3
3 2/3+5 1/2=

这种形式的,会含有空格,空格每次出现时只有一个连续的,但一个表达式中可能出现多次。

谢谢!

TA的精华主题

TA的得分主题

发表于 2015-5-19 12:13 | 显示全部楼层
本帖最后由 liu-aguang 于 2015-5-19 12:16 编辑
Moneky 发表于 2015-5-19 11:46
我是在word中做一个自己用的宏,目前写了代码可以将新版的线性公式转化为专业公式的宏。现在想写个代码用 ...

试试看是否适合:(第二个中括号中可增减运算操作符,第一个中括号中可增加一些较特别的字符,如理科中的一些常量字符)
([()\w]+([×+/*\\^=\s-]+|\b))+

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-19 12:28 | 显示全部楼层
粵CMA028,請郵寄到珠海街3棟204室,朱三收。---这种的只能变成这样--->粤CMA028街3棟204

能不能只要一个汉字带着后面6个字符的。
谢谢

TA的精华主题

TA的得分主题

发表于 2015-5-19 13:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liu-aguang 发表于 2015-5-19 12:13
试试看是否适合:(第二个中括号中可增减运算操作符,第一个中括号中可增加一些较特别的字符,如理科中的一些 ...

再借楼主一个地方。

刚刚测试了,对于下面的数据。
天天向上3+5=8好好学习
2/3+3 4/7=  的ff
1/2+2/3+3 5/6-34/8*34×24=
3x+5=8/7  测试fdasfdsa

其中会匹配到ff(这问题不大),但没有匹配到1/2+2/3+3 5/6-34/8*34×24=,是个问题,因为在小学运算中多步运算很常见。如果可以匹配到多步运算就更好了。
下面是我的测试代码,代码是word中的。
  1. Sub ttt()
  2.     Dim myRE As Object, objTmp As Object, vC As Variant
  3.     Dim myDoc As Document
  4.     Dim str1 As String
  5.     Set myDoc = ActiveDocument
  6.     Set myRE = CreateObject("VBScript.RegExp")
  7.     With myRE
  8.         .Global = True
  9.         .Pattern = "([(xπ)\w]+([×+/*\\^=\s-]+|\b))+"
  10.         .IgnoreCase = True
  11.         .MultiLine = False
  12.         Set objTmp = .Execute(myDoc.Content)
  13.         For Each vC In objTmp
  14.             str1 = vC.Value
  15.         Next
  16.     End With
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-19 13:56 | 显示全部楼层
本帖最后由 liu-aguang 于 2015-5-19 13:57 编辑
jiuri0221 发表于 2015-5-19 12:28
粵CMA028,請郵寄到珠海街3棟204室,朱三收。---这种的只能变成这样--->粤CMA028街3棟204

能不能只要一个 ...
  1. .................
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-19 14:14 | 显示全部楼层

Sub test()
    arr = Range(Range("a1"), Range("a65536").End(xlUp))
    ReDim brr(1 To UBound(arr), 1 To 1)
    Set regx = CreateObject("vbscript.regexp")
        regx.Pattern = "([一-龥][A-Za-z])\W?(\w{5,})"
    For i = 1 To UBound(arr)
        Set mh = regx.Execute(arr(i, 1))
        If mh.Count <> 0 Then _
        brr(i, 1) = UCase(mh(0).submatches(0) & mh(0).submatches(1))
        brr(i, 1) = Replace(brr(i, 1), "予", "豫")
    Next
    Range("b1").Resize(UBound(arr), 1) = brr
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 19:57 , Processed in 0.056207 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表