Nate_2020 发表于 2020-9-28 09:08:08

数字的筛选 正则表达

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

筛选结果如下:
-018702, 032874
025185, -043027, 025185, -0422
025185, -043027
026772
-043027
025185

wujiale 发表于 2020-9-28 09:12:38

666

sunrise085 发表于 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=',')

kogawananari 发表于 2020-9-28 09:46:46

R8M02X这个是不是有点犯规 python的re模块可是不支持不定长环视的

Nate_2020 发表于 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
    elif 'G85' in i:
      shu = i.replace('G85','')
      shu = shu
    elif i == 'R' and 'M02' in i:
      if 'X' in i:
            shu = i
      if 'Y' in i:
            shu = i
    else:
      shu = i

    num = re.sub('',',',shu)
    print(num)

kogawananari 发表于 2020-9-28 09:57:11

本帖最后由 kogawananari 于 2020-9-28 10:13 编辑

import re
print(re.findall(r'(?<=X|Y)-?\d+', s))
环视这样也行 【R8M02X】保证最后一个是X就行{:5_102:}
刚才忘记负数了 改一下

Nate_2020 发表于 2020-9-29 14:31:30

sunrise085 发表于 2020-9-28 09:31


谢谢, 可以实现, 就是能不能过滤掉第三行"X025185Y-043027G84X025185"后面的"G84X025185", G84后面的坐标不要.

Nate_2020 发表于 2020-9-29 14:33:00

sunrise085 发表于 2020-9-28 09:31


另外, 正则中的r'(?:X|Y)(-?\d+)'与另一用户中的r'(?<=X|Y)-?\d+', 写法不一样, 结果是一样的, 有什么区别吗?

Nate_2020 发表于 2020-9-29 14:33:33

kogawananari 发表于 2020-9-28 09:57
环视这样也行 【R8M02X】保证最后一个是X就行
刚才忘记负数了 改一下

正则中的r'(?<=X|Y)-?\d+'与另一用户中的r'(?:X|Y)(-?\d+)', 写法不一样, 结果是一样的, 有什么区别吗?

kogawananari 发表于 2020-9-29 22:23:39

Nate_2020 发表于 2020-9-29 14:33
正则中的r'(?

我这是环视 他那是分组{:10_277:}

Nate_2020 发表于 2020-10-23 16:59:27

这几天抽空把正则学了一下, 在前面2位的基础上找到可以忽略G84后面的坐标, 如下.
r'(?<!G84)(?:X|Y)(-?\d*)'
页: [1]
查看完整版本: 数字的筛选 正则表达