我有一个文本文件中的产品代码列表,每一行是产品代码,如下所示:
abcd2343 abw34324 abc3243-23A
所以它是字母,后跟数字和其他字符。
我想在第一次出现的数字上拆分。
最佳答案
import re
s='abcd2343 abw34324 abc3243-23A'
re.split('(\d+)',s)
> ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A']
或者,如果您想在第一次出现数字时进行拆分:
re.findall('\d*\D+',s)
> ['abcd', '2343 abw', '34324 abc', '3243-', '23A']
\d+
匹配 1 个或多个数字。\d*\D+
匹配 0 个或多个数字后跟 1 个或多个非数字。\d+|\D+
匹配 1 个或多个数字 或 1 个或多个非数字。
咨询the docs有关 Python 正则表达式语法的更多信息。
re.split(pat, s)
将使用 pat
作为分隔符拆分字符串 s
。如果 pat
以括号开头和结尾(以便成为“捕获组”),则 re.split
将返回与 pat
匹配的子字符串> 也一样。例如,比较:
re.split('\d+', s)
> ['abcd', ' abw', ' abc', '-', 'A'] # <-- just the non-matching parts
re.split('(\d+)', s)
> ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A'] # <-- both the non-matching parts and the captured groups
相比之下,re.findall(pat, s)
只返回 s
中匹配 pat
的部分:
re.findall('\d+', s)
> ['2343', '34324', '3243', '23']
因此,如果 s
以数字结尾,您可以通过使用 re.findall('\d+|\D+', s)
来避免以空字符串结尾而不是 re.split('(\d+)', s)
:
s='abcd2343 abw34324 abc3243-23A 123'
re.split('(\d+)', s)
> ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123', '']
re.findall('\d+|\D+', s)
> ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123']
关于python - 产品代码看起来像abcd2343,如何按字母和数字分割?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340081/