使用任何建议的方法拆分文本
Split text using any suggested method
我有这样的纯文本:
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
、PXXXXX
, 等等...).
有什么方法(使用任何脚本或任何程序语言)可以做到这一点吗?
此纯文本目前在电子表格 table 上,我需要将这些 ID 分开,以便稍后在 SQL 查询中使用,谢谢!
正则表达式数据处理
您可以通过 regex
替换(或查找和替换)来执行此操作。我碰巧在 python 中这样做了,但您可以在支持它们的任何语言或文本编辑器中使用相同的正则表达式模式('^[^/]*?: '
、'/.*'
)。
正则表达式解释
'^[^/]*?: '
- 字符串的开头和开头(第一个 ^
),以非贪婪的方式匹配多个非 \
字符([^/]*?]
),一个 :
,然后是 </code>.</li>
<li><code>'/.*'
- 匹配所有 /
,然后匹配任意字符 (.
)
处理示例(在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
。
- 匹配任意字符(
.*?
)(非贪婪),后跟字符class([AEP]
)的捕获组((...)
)由至少一个字符 class ([0-9]+
) 后跟四个单词字符 (\w{4}
),然后是另一个任意字符的捕获组 ((.*)
)
- 所有这些都匹配并替换为捕获组变量,中间有换行符 (
\n
),本质上是拆分 ID 出现两次的行
- 仅使用第一个捕获组重复步骤以处理包含第二个 ID 的换行符
更新处理
text = re.sub(r'.*?([AEP][0-9]+\w{4})(.*)', r'\n', text, flags=re.MULTILINE)
text = re.sub(r'.*?([AEP][0-9]+\w{4}).*', r'', 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
我有这样的纯文本:
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
、PXXXXX
, 等等...).
有什么方法(使用任何脚本或任何程序语言)可以做到这一点吗?
此纯文本目前在电子表格 table 上,我需要将这些 ID 分开,以便稍后在 SQL 查询中使用,谢谢!
正则表达式数据处理
您可以通过 regex
替换(或查找和替换)来执行此操作。我碰巧在 python 中这样做了,但您可以在支持它们的任何语言或文本编辑器中使用相同的正则表达式模式('^[^/]*?: '
、'/.*'
)。
正则表达式解释
'^[^/]*?: '
- 字符串的开头和开头(第一个^
),以非贪婪的方式匹配多个非\
字符([^/]*?]
),一个:
,然后是</code>.</li> <li><code>'/.*'
- 匹配所有/
,然后匹配任意字符 (.
)
处理示例(在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
。
- 匹配任意字符(
.*?
)(非贪婪),后跟字符class([AEP]
)的捕获组((...)
)由至少一个字符 class ([0-9]+
) 后跟四个单词字符 (\w{4}
),然后是另一个任意字符的捕获组 ((.*)
) - 所有这些都匹配并替换为捕获组变量,中间有换行符 (
\n
),本质上是拆分 ID 出现两次的行 - 仅使用第一个捕获组重复步骤以处理包含第二个 ID 的换行符
更新处理
text = re.sub(r'.*?([AEP][0-9]+\w{4})(.*)', r'\n', text, flags=re.MULTILINE)
text = re.sub(r'.*?([AEP][0-9]+\w{4}).*', r'', 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