鱼C论坛

 找回密码
 立即注册
查看: 2631|回复: 10

[已解决]数字的筛选 正则表达

[复制链接]
发表于 2020-9-28 09:08:08 | 显示全部楼层 |阅读模式

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

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

x
想筛选一些坐标里的数字(有些含负号'-'), 有没有什么正则可以方便的筛选的到,坐标如下:
X-018702Y032874
X025185Y-043027G85X025185Y-0422
X025185Y-043027G84X025185
X026772
Y-043027
R8M02X025185

筛选结果如下:
-018702, 032874
025185, -043027, 025185, -0422
025185, -043027
026772
-043027
025185
最佳答案
2020-9-28 09:31:06
import re
lst=['X-018702Y032874','X025185Y-043027G85X025185Y-0422','X025185Y-043027G84X025185','X026772','Y-043027','R8M02X025185']
result=[]
for string in lst:
    result.append(re.findall(r'(?:X|Y)(-?\d+)',string))
for each in result:
    print(*each,sep=',')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-28 09:12:38 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-28 09:31:06 | 显示全部楼层    本楼为最佳答案   
import re
lst=['X-018702Y032874','X025185Y-043027G85X025185Y-0422','X025185Y-043027G84X025185','X026772','Y-043027','R8M02X025185']
result=[]
for string in lst:
    result.append(re.findall(r'(?:X|Y)(-?\d+)',string))
for each in result:
    print(*each,sep=',')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-28 09:46:46 | 显示全部楼层
R8M02X这个是不是有点犯规 python的re模块可是不支持不定长环视的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-28 09:47:25 | 显示全部楼层
我自己写了一个, 但感觉有点啰嗦, 由于本人还没有学到正则表达, re模块粗略的看了一下, 请指教:
zb = ['X-018702Y032874',\
      'X025185Y-043027G85X025185Y-0422',\
      'X025185Y-043027G84X025185',\
      'X026772',\
      'Y-043027',\
      'R8M02X025185',\
      'R8M02Y025185']

for i in zb:
    if 'G84' in i:
        shu = i[1:i.index('G')]
    elif 'G85' in i:
        shu = i.replace('G85','')
        shu = shu[1:]
    elif i[0] == 'R' and 'M02' in i:
        if 'X' in i:
            shu = i[i.index('X')+1:]
        if 'Y' in i:
            shu = i[i.index('Y')+1:]
    else:
        shu = i[1:]

    num = re.sub('[X,Y]',',',shu)
    print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-28 09:57:11 | 显示全部楼层
本帖最后由 kogawananari 于 2020-9-28 10:13 编辑
import re
print(re.findall(r'(?<=X|Y)-?\d+', s))
环视这样也行 【R8M02X】保证最后一个是X就行
刚才忘记负数了 改一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 14:31:30 | 显示全部楼层

谢谢, 可以实现, 就是能不能过滤掉第三行"X025185Y-043027G84X025185"后面的"G84X025185", G84后面的坐标不要.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 14:33:00 | 显示全部楼层

另外, 正则中的r'(?:X|Y)(-?\d+)'与另一用户中的r'(?<=X|Y)-?\d+', 写法不一样, 结果是一样的, 有什么区别吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 14:33:33 | 显示全部楼层
kogawananari 发表于 2020-9-28 09:57
环视这样也行 【R8M02X】保证最后一个是X就行
刚才忘记负数了 改一下

正则中的r'(?<=X|Y)-?\d+'与另一用户中的r'(?:X|Y)(-?\d+)', 写法不一样, 结果是一样的, 有什么区别吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 22:23:39 | 显示全部楼层

我这是环视 他那是分组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-23 16:59:27 | 显示全部楼层
这几天抽空把正则学了一下, 在前面2位的基础上找到可以忽略G84后面的坐标, 如下.
r'(?<!G84)(?:X|Y)(-?\d*)'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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