regexp_split_to_array(lower(work_content), '(?=((?!\d)10|35|\d{3})(?=kv|千伏))')
时间: 2024-04-05 16:29:10 浏览: 63
你的问题是一个代码问题,它使用了 PostgreSQL 中的一个函数 regexp_split_to_array(),并传入了两个参数:lower(work_content) 和一个正则表达式 '(?=((?!\d)10|35|\d{3})(?=kv|千伏))'。这个函数的作用是将字符串按照正则表达式进行拆分,并返回一个数组。
具体来说,这个正则表达式的含义是:匹配以 'kv' 或 '千伏' 结尾的,前面是非数字的 '10'、'35' 或三位数字的子串,将这个子串作为拆分的标志。
因此,这段代码的作用是将字符串按照电压等级进行拆分,并将拆分后的子串保存在数组中。
相关问题
regexp_split_to_array(lower(work_content), '(?=((?!\d)10|35|\d{3})(?=kv|千伏))')为什么加了Lower
函数 lower() 的作用是将字符串转换为小写字母,它与正则表达式配合使用可以实现忽略大小写的匹配。在这段代码中,将工作内容字符串先转换为小写字母后,再与正则表达式进行匹配,可以保证不会因为大小写不同而导致匹配失败的问题。
另外,数据库中的字符串匹配通常是区分大小写的。因此,如果不将工作内容字符串转换为小写字母,可能会因为大小写不同而无法匹配到想要的结果。
regexp_matches(array_to_string(regexp_split_to_array(lower(work_content), '(?=((?!\d)10|35|\d{3})(?=kv|千伏))'), ';'), '(?i)站[^,;,。;]*(?:态势感知|安全设备|二次安防)[^,;,。;]*(?:调试|配置|巡检|B平面改造)') matched
这段SQL语句主要是使用了正则表达式对字符串进行匹配,其中包含了两个正则表达式。
第一个正则表达式使用了`regexp_split_to_array`函数将字符串按照`(?=((?!\d)10|35|\d{3})(?=kv|千伏))`进行分割,即按照`10kV`、`35kV`、`xxxkV`或`xxx千伏`进行分割,然后将分割后的数组使用`array_to_string`函数以分号为分隔符转换为字符串。这个正则表达式的作用是将字符串中的电压等级筛选出来,方便后面的正则表达式进行匹配。
第二个正则表达式使用了`regexp_matches`函数进行匹配,其中`(?i)`表示匹配时忽略大小写,`站[^,;,。;]*`表示匹配以`站`开头,后面不含逗号、分号、句号等标点符号的字符串,`(?:态势感知|安全设备|二次安防)`表示匹配包含`态势感知`、`安全设备`、`二次安防`中的任意一个的字符串,`[^,;,。;]*`表示匹配任意不含逗号、分号、句号等标点符号的字符串,`(?:调试|配置|巡检|B平面改造)`表示匹配包含`调试`、`配置`、`巡检`、`B平面改造`中的任意一个的字符串。这个正则表达式的作用是筛选出符合条件的字符串。最后,将匹配到的结果使用`matched`关键字命名,方便后续操作。
阅读全文