ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 正则怎么匹配前面没有某些字符的内容?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-29 19:11 | 显示全部楼层 |阅读模式
正则表达式语法学了一段时间了,对于一般简单的,也能够依葫芦画瓢,写的差不多,但是对于复杂的,还是一脸懵懂。

我知道:
.+(?=pattern) 是匹配pattern前面的内容
(?<=pattern:).+是匹配pattern后面的内容

可是怎么匹配前面或后面没有pattern的内容,比如:
1cm+2*math.sin(0)+3cm  这个我改怎么匹配前面没有“math."的字母,这里的cm只是举例,也可能是其它的;


TA的精华主题

TA的得分主题

发表于 2019-9-29 19:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你搞错了,在vba论坛问逆向0宽是个很不理智的问题。正则入门容易精通难,祝你好运,哈哈

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-29 19:21 | 显示全部楼层
killq 发表于 2019-9-29 19:17
你搞错了,在vba论坛问逆向0宽是个很不理智的问题。正则入门容易精通难,祝你好运,哈哈

我现在对于0宽什么玩意的,还没理解到呢

TA的精华主题

TA的得分主题

发表于 2019-9-29 19:26 | 显示全部楼层
mzbao 发表于 2019-9-29 19:21
我现在对于0宽什么玩意的,还没理解到呢。

你问的就是0宽断言,第一个是正向,lookahead,第二个是逆向,lookbehind,VBA不支持逆向。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-29 19:33 | 显示全部楼层
killq 发表于 2019-9-29 19:26
你问的就是0宽断言,第一个是正向,lookahead,第二个是逆向,lookbehind,VBA不支持逆向。

经过你的提醒,我上网又去搜索知识学了一下。对于上面我简单的示例,竟然让我试出来了。
  1. (?!math\.)[a-z]+(?=\+|$)
复制代码


以前我每次都只是在前面加(?!),所以导致结果都不对,刚突然想起是不是需要在后面也加个。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-29 19:37 | 显示全部楼层
killq 发表于 2019-9-29 19:26
你问的就是0宽断言,第一个是正向,lookahead,第二个是逆向,lookbehind,VBA不支持逆向。

哎!正则这东西简直有点折磨人。写起来有时候太绕了。就上面的示例,我都想了好多天了,一直纠结着我,想到论坛上来问吧,又感觉是不是太简单了,问起来不好意思,不问吧,自己老想不出来。今天实在憋着没办法了,还是上来问了。

TA的精华主题

TA的得分主题

发表于 2019-9-29 19:46 | 显示全部楼层
mzbao 发表于 2019-9-29 19:33
经过你的提醒,我上网又去搜索知识学了一下。对于上面我简单的示例,竟然让我试出来了。

你这个是错误的写法,也许只是你临时没发现问题吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-29 19:49 | 显示全部楼层
killq 发表于 2019-9-29 19:46
你这个是错误的写法,也许只是你临时没发现问题吧

我也感觉这个表达式可能只是刚好满足这个示例。但至少解决我的纠结,下回碰到其它的再来头疼了。

TA的精华主题

TA的得分主题

发表于 2019-9-29 19:54 | 显示全部楼层
本帖最后由 killq 于 2019-9-29 19:56 编辑
mzbao 发表于 2019-9-29 19:49
我也感觉这个表达式可能只是刚好满足这个示例。但至少解决我的纠结,下回碰到其它的再来头疼了。

0宽的作用就是定位一个位置,简单理解的话就是:
正向的放在最后面,lookahead
逆向的放在最前面,lookbehind
否则就起不到作用。中文译过来的不如英文的更方便理解,看英文吧

TA的精华主题

TA的得分主题

发表于 2019-9-29 19:54 | 显示全部楼层
优先排除掉前面有math.的字母,捕获余下的字母就是了。
所以,正则是:
math\.[a-zA-Z]+|([a-zA-Z]+)|.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 09:14 , Processed in 0.039904 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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