请教一个关于正则函数“零宽断言”的问题

zha7090
zha7090

创作者俱乐部成员

零宽断言是正则表达式中的一种方法,正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。共有四种形式: (?=patten)零宽正向先行断言(zero-width positive lookahead assertion) (?lpattern)零宽负向先行断言(zero-width negative lookahead assertion) (<=pattern)零宽正向后行断言(zero-width positive lookbehind assertion) (?<lpattern)零宽负向后行断言(zero-width negative lookbehind assertion) 我的问题是:在WPS中如何联用这四种形式中的任意两种? 例如对于下面的内容,我希望将“组--元”之间的数据分组提取出来。我想像中的方法是“组”之后到“元”之前的数据。如果零宽断言可以联合应用的话,也许就可以实现。但不知道应该如何操作。请不吝赐教: 甲组 老人5人 中年3人 儿童7人 每人10元;乙组 老人3人 中年6人 儿童2人 每人8元 谢谢!
广东省
浏览 376
1
8
分享
8 +1
29
1 +1
全部评论 29
 
Vicky
学习
· 上海
回复
 
董欣煜
如图,使用了零宽断言和懒惰匹配的知识
· 吉林省
1
回复
wps新路
wps新路

WPS函数专家

董老师厉害
· 重庆
回复
 
Tam Kingsley
Tam Kingsley

创作者俱乐部成员

按照您描述的需求可以用REGEXP(A1,"(?<=组 )(.*?)(?=元)")这个正则来实现,下面截图提供了WPS表格的效果和正则编写工具的效果~
· 广东省
1
回复
Tam Kingsley
Tam Kingsley

创作者俱乐部成员

补充一下用数据库也可以,用select unnest(regexp_matches('甲组 老人5人 中年3人 儿童7人 每人10元;乙组 老人3人 中年6人 儿童2人 每人8元', '(?<=组 )(.*?)(?=元)','g'))这个~
· 广东省
1
回复
 
wps新路
wps新路

WPS函数专家

没看懂需求,也没有一个答案样本,看上面大神模拟的答案 =REGEXP(A1,"组\s\K[^元]+")
· 重庆
1
回复
wps新路
wps新路

WPS函数专家

额 没用零宽断言
· 重庆
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

没看懂说明,看懂了需求,提取数据用TEXTAFTER和TEXTBEFORE就完了,REGEXP就只能用于桌面版WPS其他任何设备(手机版、ipad、微信打开都看不到),虽然用TEXTAFTER和TEXTBEFORE用手机版WPS打开也看不到,但其他手机版支持啊,REGEXP实在是太小众了,小众到WPS自己的手机版都不愿意支持,小众=不方便=不实用。 TEXTAFTER(TEXTBEFORE(G3,"元",1),"组",1) TEXTAFTER(TEXTBEFORE(G3,"元",-1),"组",-1)
· 四川省
1
回复
一切皆有可能1420030137
你用手机写函数啊?牛逼啊。感觉很不方便啊。特别眼睛和手指。问下:你用什么手机软件写的函数?还有正则函数很复杂。千变万化。其他函数不管怎么嵌套。也没他变化多。就这一个函数够我喝一壶的。
· 湖北省
回复
 
路人甲
学习了
· 湖北省
回复
 
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

太专业了!
· 陕西省
回复
 
魏朝先
=REGEXP(A1,"(?<=组).*?(?=元)")
· 江西省
1
回复
zha7090
zha7090

创作者俱乐部成员

谢谢指教
· 新疆
回复