找回密码
 加入
搜索
楼主: 邪恶海盗

[网络通信] [已解决]请教一个正则表达式提取字符串的问题

[复制链接]
 楼主| 发表于 2025-5-23 20:39:20 | 显示全部楼层
zghwelcome 发表于 2025-5-23 20:32
* + 都是贪婪模式(尽可能多的匹配),前者可以匹配空,后者至少匹配一个字符 ...

那如果字符串是ABC[XXX3-1,15:29]这样用+会报错?


发表于 2025-5-23 22:53:48 | 显示全部楼层
邪恶海盗 发表于 2025-5-23 20:39
那如果字符串是ABC[XXX3-1,15:29]这样用+会报错?

因为这个字符串里面没有水平字符 (\h ,即空格、TAB符),所以没有匹配成功
 楼主| 发表于 2025-5-23 23:00:05 | 显示全部楼层
zghwelcome 发表于 2025-5-23 22:53
因为这个字符串里面没有水平字符 (\h ,即空格、TAB符),所以没有匹配成功 ...

所以还是用*适应面更广一些?


二○二五年五月二十三日
 楼主| 发表于 2025-5-24 13:24:11 | 显示全部楼层
正则分析:

1.将字符串划按想得到的结果分成几个部分,此示例需要提取第3部分(标示红色):



2.使用正则匹配每个部分:
第一部分,由于存在中文、英文、水平空格、特殊符号(如]),所以需要用 . (任意单字符)来表示,而由于字符数量不等,所以用 .* 表示多个单字符(*表示重复)
第二部分,空格,使用 \h 表示
第三部分,字符数量不等且存在特殊符号(如-,:),同样用 .* 来表示
第四部分,符号],使用 \] 来表示

3.组合正则,排除第一、二、四部分,提取第三部分(需要用小括号()包起来),所以表达式为:
.*\h(.*)\]

还有一个问题,第四部分]右边的不写正则所以默认排除么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2025-5-24 13:40:40 | 显示全部楼层
只要有定位的字符 ] 就行了,且由于定位符号 ] 的唯一性,前后修辞表达式都不需要,因此这样就行了
(\H+)]
 楼主| 发表于 2025-5-24 14:08:57 | 显示全部楼层
afan 发表于 2025-5-24 13:40
只要有定位的字符 ] 就行了,且由于定位符号 ] 的唯一性,前后修辞表达式都不需要,因此这样就行了
(\H+)] ...

测试输出结果有效,但看不懂这个写法,能不能解释一下?


发表于 2025-5-24 14:18:35 | 显示全部楼层
本帖最后由 3131210 于 2025-5-24 14:28 编辑

匹配 ] 符号前面的 非空白字符

像\d  就是匹配数字  \D  就是匹配非数字
正则里面大小写的区别就是这样
\s  空白字符  \S  非空白字符


至于你问的 第四部分 ] 右边 不是不管  如果你是匹配全部 如果条件满足  还有 符号 ] 的右边 还有符号] 且满足它的前面为非空字符串  就会匹配到第二组 第三组 第四组



也可以用这个正则提取   ([0-9,-:]+)
 楼主| 发表于 2025-5-24 14:30:41 | 显示全部楼层
3131210 发表于 2025-5-24 14:18
匹配 ] 符号前面的 非空白字符

碰到空白时就自动丢弃?
发表于 2025-5-24 14:33:45 | 显示全部楼层
因为规则就是 非空字符串+符号]   如果是空的 就是匹配不到  你也可以理解丢弃
 楼主| 发表于 2025-5-24 14:43:32 | 显示全部楼层
3131210 发表于 2025-5-24 14:33
因为规则就是 非空字符串+符号]   如果是空的 就是匹配不到  你也可以理解丢弃 ...

这里]不需要加\转义?
发表于 2025-5-24 14:49:04 | 显示全部楼层
邪恶海盗 发表于 2025-5-24 14:43
这里]不需要加\转义?

右方括号 ] 只有在字符集([...])中才有特殊含义,用于表示字符集的结束。在字符集外,"]" 就只是一个普通的字符,不用转义

\H+)]这里的]符号只起到定位的作用
 楼主| 发表于 2025-5-24 15:26:02 | 显示全部楼层
3131210 发表于 2025-5-24 14:49
右方括号 ] 只有在字符集([...])中才有特殊含义,用于表示字符集的结束。在字符集外,"]" 就只是一个普 ...

我X,这么多道道,正则真是博大精深啊...


发表于 2025-5-24 17:00:00 | 显示全部楼层
3131210 发表于 2025-5-24 14:18
匹配 ] 符号前面的 非空白字符

像\d  就是匹配数字  \D  就是匹配非数字

,-这两个表示什么?
可以不用也能匹配
 楼主| 发表于 2025-5-24 17:56:39 | 显示全部楼层
redapple2008 发表于 2025-5-24 17:00
,-这两个表示什么?
可以不用也能匹配

应该是,-:吧,就是单纯指的这三个符号...
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-6-4 14:44 , Processed in 0.175004 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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