②WPS新增的REGEXP函数,有何特别魔力让人如此推荐?
创作者俱乐部成员
【这是REGEXP函数的第二篇,还有第三篇】
昨天我们介绍了正则表达式的基础知识、REGEXP函数的提取和拆分的基础入法。
接昨天的文章:
今天我们继续:
按多个指定字符拆分
公式:
=REGEXP(A2,"[^*/-]+")
正则表达式解释:
^:在字符集中,它表示“非”或“排除”的意思,即不匹配括号内列出的字符。
[^*/-]+ 这个正则表达式匹配任何不是星号(*)、斜杠(/)或连字符(-)的字符,并且这个模式会匹配一个或多个这样的字符(因为 + 表示匹配一次或多次)。
取指定第几节
在上面的公式外套一个INDEX函数,取指定的第几节
公式:
=INDEX(REGEXP(A2,"[^*/-]+"),3)
提取多个指定字符前后的内容
提取“镇、乡、街道”之前(含)的内容
公式:
=REGEXP(A2,"(.+)[镇乡街道]")
正则表达式解释:
(.+):这是一个捕获组,用圆括号 () 表示。. 表示匹配任意单一字符(除了换行符),而 + 表示匹配前面的元素一次或多次。因此,(.+) 会匹配一个或多个任意字符,并将这些字符作为一个捕获组。
[镇乡街道]:这是一个字符集,用方括号 [] 表示。它会匹配方括号内的任意一个字符。在这里,它会匹配“镇”、“乡”、“街”或“道”这四个字符中的任意一个。
提取“镇、乡、街道”之后(不含)的内容
公式:
=REGEXP(A2,"([^镇乡(街道)]+)$")
正则表达式解释:
$:表示字符串的结尾。
提取最后一个指定字符之前的内容(不含)
公式:
=REGEXP(A2,"^.*(?=\\)")
正则表达式解释:
^: 表示匹配输入字符串的开始位置。
.*: 表示匹配任意字符(除换行符外)零次或更多次。
(?=\\): 这是一个零宽度正预测先行断言,表示匹配后面紧跟着一个反斜杠 \ 的位置。(两个反斜杠表示反斜杠本身。第一个反斜杠是转义符)
使用REGEXP函数进行替换
公式
=REGEXP(A2,"(偷懒1)|(toulan3)|(偷lan2)",2," ")
“|”是或的意思,三个分组之间用 | 分隔,表示逻辑“或”。这意味着只要单元格 A2 的内容匹配这三个子模式中的任意一个,正则表达式就会返回匹配成功。
REGEXP的第三参数为2表示进行替换。第三参数为替换后的内容。
使用REGEXP函数进行插入
公式:
=REGEXP(A2,"([一-龟]+)(\d{2})(.+)$",2,"\1\2偷懒\3")
解释:
"([一-龟]+)(\d{2})(.+)$"
([一-龟]+):这是一个捕获组,匹配一个或多个从“一”到“龟”的中文字符。在Unicode中,“一”到“龟”是一个连续的字符范围,因此这个表达式可以匹配这个范围内的任意中文字符。
(\d{2}):这是第二个捕获组,匹配恰好两个数字字符。
(.+):这是第三个捕获组,匹配一个或多个任意字符(除了换行符)。
$:表示字符串的结尾。
"\1\2偷懒\3"
\1:引用第一个捕获组匹配的内容。
\2:引用第二个捕获组匹配的内容。
偷懒:这是一个固定的文本字符串,将被插入到替换结果中。
\3:引用第三个捕获组匹配的内容。
另外,再来看群友分享的一个插入案例,一个很牛的正则表达式,值得好好揣摩:
在二个字的姓名中插入空格
公式:
=REGEXP(A2,"(?<=^|\+)([一-龟])([一-龟])(?=\+|/|$)",2,"\1 \2")
解释:
"(?<=^|\+)([一-龟])([一-龟])(?=\+|/|$)"
(?<=^|\+):这是一个后视断言(lookbehind assertion),它表示匹配必须紧跟在字符串的开头 ^ 或者加号 + 之后。
([一-龟]):这是一个捕获组,匹配从“一”到“龟”这个范围内的任意一个中文字符。
(?=\+|/|$):这是一个前瞻断言(lookahead assertion),它表示匹配必须后面紧跟一个加号 +、斜杠 / 或者字符串的结尾 $。
替换模式
"\1 \2"
\1:引用第一个捕获组匹配的内容。
:插入一个空格。
\2:引用第二个捕获组匹配的内容。
去掉带汉字的括号内的内容、中括号内的所有内容
这是RPA偷懒群群友的问题,去掉带汉字的括号内的内容、中括号内的所有内容
公式:
=REGEXP(A2,"([(\(][^()]*[一-龟]+[^()]*[\))])|(【.*?】)",2,"")
解释:
第一个捕获组:[(\(][^()]*[一-龟]+[^()]*[\))])
[(\(]:匹配一个左括号,可以是中文的左括号 ( 或英文的左括号 (。
[^()]*:匹配零个或多个不是左括号 ( 或右括号 ) 的字符。
[一-龟]+:匹配一个或多个从“一”到“龟”的中文字符。
[^()]*:再次匹配零个或多个不是左括号 ( 或右括号 ) 的字符。
[\))]:匹配一个右括号,可以是中文的右括号 ) 或英文的右括号 )。
这个捕获组主要用于查找被括号包围的字符串,其中至少包含一个从“一”到“龟”的中文字符。
第二个捕获组:【.*?】
【:匹配中文的左方括号。
.*?:非贪婪模式匹配零个或多个任意字符(除了换行符)。
】:匹配中文的右方括号。
这个捕获组用于查找被中文方括号包围的任意字符串。
替换模式:""
在这个例子中,替换模式是一个空字符串 "",这意味着如果找到匹配项,它将被替换为一个空字符串,即删除匹配到的内容。
如果要求和,还要使用substituts函数替换将中括号、大括号替换为小括号,然后再用EVALUATE函数求和(Excel只能在定义名称中使用)
完整公式
=EVALUATE(SUBSTITUTES(REGEXP(A2,"([(\(][^()]*[一-龟]+[^()]*[\))])|(【.*?】)",2,""),{"{","[","(","}","]",")"},{"(","(","(",")",")",")"}))
提取整理个人信息
个人信息姓名在最前面,其他信息顺序不一致,且分隔符不一致。要用公式提取比较麻烦,用正则表达式来提取却得心应手。
数据:
张三、手机号:13912345678 车牌 京AF12345 生日:1990年5月15日 出生地:北京市海淀区
欧阳峰,籍贯:上海市徐汇区 车号:沪B6789Q 手机号:13698765432 出生:1985-10-20
慕容吹雪 粤CD54321 广东省深圳市 1988年3月25日 13787654321
赵六、手机:13565432109 江苏省南京市 出生:1995-7-18 车牌号:苏D0987X
刘牛 四川省成都市 1983-12-18 手机13876543210 车牌 川F23456
公式:
提取姓名:
=REGEXP(A2,"(^[一-龟]+)")
提取手机号:
=REGEXP(A2,"([0-9]{11})")
提取籍贯(五个汉字以上):
=REGEXP(A2,"([一-龟]{5,})")
提取出生日期:
=--REGEXP(A2,"(\d{4}年\d{1,2}月\d{1,2}日|\d{4}-\d{1,2}-\d{1,2})")
提取车牌号:
=REGEXP(A2,"(?<=[^一-龟\w])([一-龟]\w+)")
提取手机号、籍贯、车牌号等这些都不是很精确的写法。
后面还有第三篇,有更多新颖的用法
创作者俱乐部成员
创作者俱乐部成员