鱼C论坛

 找回密码
 立即注册
查看: 2866|回复: 5

[已解决]关于正则问题

[复制链接]
发表于 2022-12-13 20:37:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x



import re
txt ='|570000C19302|C193|NCG|JGG|NCG|JGG|13:27|16:46|03:19|Y|f6vFuIpoXA%2FEL6QWCyftUyPH6nCMG2075BNBllqDF7JmjZjN|20221217|3|G1|01|03|1|0|||||||2||有||无||||J0O0W0|JOO|0|0||J009900021O005600000O005603002|0|||||1|0#1#0#0#z||'
txt = re.findall(r'|(.*?)|',txt)
print(txt)


想要提取一段字符串中两根  | 之间的字符,为啥我这样写提取出来的列表还有空元素??其他元素也是一个一个的字符??下面截图了列表的一部分
最佳答案
2022-12-13 21:29:55
因为|这个符号在正则里是表示或者的意思,所以不能用这个来分。你只能把|个符号进行一个转换。比如替换为#,同时,还必须是两个#号才好处理。不然只有一个的话,每两个就取得了一个,因为第一个正则把后面的符号占用了。对于你这个种要求,为什么要用正则呢,直接用split函数不是更快吗
QQ浏览器截图20221213203513.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-13 21:29:55 | 显示全部楼层    本楼为最佳答案   
因为|这个符号在正则里是表示或者的意思,所以不能用这个来分。你只能把|个符号进行一个转换。比如替换为#,同时,还必须是两个#号才好处理。不然只有一个的话,每两个就取得了一个,因为第一个正则把后面的符号占用了。对于你这个种要求,为什么要用正则呢,直接用split函数不是更快吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-13 21:57:58 | 显示全部楼层
本帖最后由 cflying 于 2022-12-13 22:41 编辑
txt = re.findall(r'\|(.*?)(?=\|)',txt)
是这个意思么
或者这个也行,第二个\|不要\也可以,但是就是有空
txt = re.findall(r'/|([^|]+)\|',txt)
甚至这样也行
txt = re.findall(r'[^|]+',txt)
^|替换成[a-z0-9等]一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-13 22:02:21 | 显示全部楼层
楼上说的有道理,虽然 | 可以用 \ 转义取消或的功能,但是只有一个 | 的话前面匹配了,后面就不会再匹配,

就拿前面的 |570000C19302|C193|NCG| 来说,r'\|(.*?)\|' 匹配到了 |570000C19302|,C193 前面的 | 被用了,

C193 前面就没有 | 了,下一个会匹配 |NCG|,也就是会隔一个才能匹配,你无法获取到所有 | 之前的字符串,

所以你得先把一个 | 换成两个 |,所以为什么要把简单的问题搞复杂呢,还不如用字符串的 split 方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-13 22:08:32 | 显示全部楼层
gywjj 发表于 2022-12-13 21:29
因为|这个符号在正则里是表示或者的意思,所以不能用这个来分。你只能把|个符号进行一个转换。比如替换为#, ...

感谢!!!这段时间用正则处理字符串用多了,第一时间想到的也是正则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-13 22:20:25 | 显示全部楼层
本帖最后由 cflying 于 2022-12-13 22:43 编辑

正则最好先看数据结构,不同的数据结构选用不同的实现方式,多看看手册说明,比如正向、反向等平时用不到,但是遇到一些奇怪的数据的时候就可能会用上
转义后|可以用,至于隔一个的问题,完全可以通过正向匹配方法来解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 09:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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