python - 产品代码看起来像abcd2343,如何按字母和数字分割?

标签 python string split

我有一个文本文件中的产品代码列表,每一行是产品代码,如下所示:

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/

相关文章:

c# - 将字符串中的一定数量的字符附加到另一个字符串

bash - bash 中的另一个分割文件 - 基于 x 列行之间的差异

c++ - C++ 中读取大型 CSV 文件的性能问题

javascript:通过给定分隔符将数组拆分为子数组

python - 将二维数组转换为两列数据框 pandas

python - 为什么 PyCharm 有时不使用系统环境变量作为虚拟环境的 PATH?

python - 查找字符串之间的差异

python - Django REST API 返回 Angular 4 中不存在 'Access-Control-Allow-Origin' header

在 C 中将临时字符串转换为 int

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?