0

我有这样的纯文本:

Cart ID: A3N42M / Copy: A3N42P PO: 5000021337 Invoice: 3110021337
Cart ID: A3N3ZW / Copy: A3N3ZX/ PO: 5000021335 Invoice: 3110021335 
Cart ID: A3N3ZL / Copy: A3N3ZM PO: 5000021336 Invoice: 3110021336 
Original: A3N444 / Copy: A3N445 PO: 5000021340 Invoice: 3130021340
Original: A3N44C / Copy: A3N44D PO: 5000021341 Invoice: 3130021341
Original: A3N44G / Copy: A3N44H PO: 5000021342 Invoice: 3130021342
Cart ID: A3N3ZZ / Copy: A3N428 PO: A3N3ZZ01
Cart ID: A3N3ZQ / Copy: A3N3ZV PO: A3N3ZQ01
Cart ID: A3N336 / Copy: A3N337 PO: A3N33601
E3M49D / E3M49Q - PO: 4620028049
E3M49N / E3M49X
E3M49P / E3M49Y

我需要从该文本中拆分购物车 ID,并最终得到如下内容:

A3N42M
A3N42P
A3N3ZW
...
E3M49N
...

这些 ID 始终为 6 位长度,并且始终以AEP( AXXXXXEXXXXXPXXXXX等...) 开头。

有什么方法(使用任何脚本或任何程序语言)可以实现这一点吗?

此纯文本当前位于电子表格表中,我需要将这些 ID 分开以供稍后在 SQL 查询中使用,谢谢!

4

1 回答 1

1

正则表达式数据处理


您可以通过regex替换(或查找和替换)来执行此操作。我碰巧在 python 中做到了这一点,但是您可以在任何支持它们的语言或文本编辑器中使用相同的正则表达式模式 ( '^[^/]*?: ', )。'/.*'

正则表达式解释

  1. '^[^/]*?: '- 字符串的开头和开头(first ),以非贪婪方式^匹配多个非字符( ),a ,然后是a 。\[^/]*?]:
  2. '/.*'- 匹配所有/,然后多个任意字符 ( .)

处理示例(在 Python 中)

import re

text = '''
Cart ID: A3N42M / Copy: A3N42P PO: 5000021337 Invoice: 3110021337
Cart ID: A3N3ZW / Copy: A3N3ZX/ PO: 5000021335 Invoice: 3110021335 
Cart ID: A3N3ZL / Copy: A3N3ZM PO: 5000021336 Invoice: 3110021336 
Original: A3N444 / Copy: A3N445 PO: 5000021340 Invoice: 3130021340
Original: A3N44C / Copy: A3N44D PO: 5000021341 Invoice: 3130021341
Original: A3N44G / Copy: A3N44H PO: 5000021342 Invoice: 3130021342
Cart ID: A3N3ZZ / Copy: A3N428 PO: A3N3ZZ01
Cart ID: A3N3ZQ / Copy: A3N3ZV PO: A3N3ZQ01
Cart ID: A3N336 / Copy: A3N337 PO: A3N33601
E3M49D / E3M49Q - PO: 4620028049
E3M49N / E3M49X
E3M49P / E3M49Y
'''

text = re.sub('^[^/]*?: ([]*?)', '', text, flags=re.MULTILINE)
text = re.sub('/.*', '', text)

print text

A3N42M 
A3N3ZW 
A3N3ZL 
A3N444 
A3N44C 
A3N44G 
A3N3ZZ 
A3N3ZQ 
A3N336 
E3M49D 
E3M49N 
E3M49P

编辑


更新的正则表达式说明

regex根据作者的要求更新。

  1. 匹配任何字符 ( .*?)(非贪婪),后跟一个字符类 ( ) 的捕获组 ( (...)),[AEP]后跟至少一个字符类 ( [0-9]+),后跟四个单词字符 ( \w{4}),然后是另一个任意字符的捕获组( (.*))
  2. 所有这些都与捕获组变量匹配并替换为 ( \1\n\2) 之间的换行符,实质上是拆分 ID 出现两次的行
  3. 仅对第一个捕获组重复步骤以处理包含第二个 ID 的换行符

更新处理

text = re.sub(r'.*?([AEP][0-9]+\w{4})(.*)', r'\1\n\2', text, flags=re.MULTILINE)
text = re.sub(r'.*?([AEP][0-9]+\w{4}).*', r'\1', text, flags=re.MULTILINE)

print text

A3N42M
A3N42P
A3N3ZW
A3N3ZX
A3N3ZL
A3N3ZM
A3N444
A3N445
A3N44C
A3N44D
A3N44G
A3N44H
A3N3ZZ
A3N428
A3N3ZQ
A3N3ZV
A3N336
A3N337
E3M49D
E3M49Q
E3M49N
E3M49X
E3M49P
E3M49Y
于 2016-07-26T14:52:27.330 回答