我有一个这样的纯文本:
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位数字,始终以A
,E
或P
(AXXXXX
,EXXXXX
,{{1}开头等等......)。
有没有办法(使用任何脚本或任何程序语言)我可以实现这个目标?
此纯文本目前位于电子表格表格中,我需要将这些ID分开,以便以后在SQL查询中使用,谢谢!
答案 0 :(得分:1)
您可以通过regex
替换(或查找和替换)执行此操作。我碰巧在python中这样做,但你可以在支持它们的任何语言或文本编辑器中使用相同的正则表达式模式('^[^/]*?: '
,'/.*'
)。
'^[^/]*?: '
- 字符串的开头和开头(第一个^
),以非贪婪的方式匹配多个非\
字符([^/]*?]
),{{1然后是:
。
- 匹配所有'/.*'
,然后匹配多个任何字符(/
).
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
根据Guilherme De Mario的请求更新了A3N42M
A3N3ZW
A3N3ZL
A3N444
A3N44C
A3N44G
A3N3ZZ
A3N3ZQ
A3N336
E3M49D
E3M49N
E3M49P
。
regex
)(非贪婪),后跟一个字符类(.*?
)的捕获组((...)
),后跟至少一个字符类([AEP]
)后跟四个单词字符([0-9]+
),后跟另一个任意字符的捕获组(\w{4}
)(.*)
),实际上是拆分ID出现两次的行\1\n\2
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