如何根据字母进行分割?

时间:2018-11-03 05:08:03

标签: python

我正在尝试根据以下字母进行拆分,但由于某种原因无法正常工作,我具有当前和预期的输出,我在做什么错?如何解决?

chiprev = ['4355b3','4364a1','4278b3']

for rev in chiprev:
    print rev.split("[a-b][A-B]")[-1]

当前输出:-

4355b3
4364a1
4278b3

预期的输出:-

b3
a1
b3

3 个答案:

答案 0 :(得分:2)

for i in chiprev:
    print(i[re.search(r'[a-zA-Z]',i).start():])

出局:

b3
a1
b3

答案 1 :(得分:2)

这使用search正则表达式操作。

换句话说,它实际上是取每个rev,查找以a-b(小写)或A-B(大写)开头的所有子片段,因此是|操作员。 +表示还提取以下内容。这将使搜索还可以提取字母后面的数字。

chiprev = ['4355b3','4364a1','4278b3']

for rev in chiprev:
    print re.search(r'([a-b]|[A-B]).+',rev).group()

输出:

b3
a1
b3

答案 2 :(得分:0)

您正尝试在abAB上使用正则表达式进行拆分,因此可以使用re.split

您使用的[a-b][A-B]正则表达式不会提供预期的输出,因为它匹配2个范围,ab小写和AB大写在示例数据中找不到匹配项,因为它仅包含一个{{1} }或a

如果您尝试在小写或大写字母a-z上进行拆分,则可以使用标志b。作为正则表达式,可以在返回捕获组时使用捕获组。

re.IGNORECASE

这将匹配

  • ([a-z][0-9]+)捕获组
    • (匹配单个字符a-z
    • [a-z]匹配一个数字1次以上(忽略[0-9]+匹配一个数字)
  • +关闭捕获组

从结果中选择第二个字段。例如:

)

结果

import re
chiprev = ['4355b3','4364a1', '4278b3']
for rev in chiprev:
    print (re.split("([a-z][0-9]+)", rev, flags=re.IGNORECASE)[1])

Demo