我正在尝试根据以下字母进行拆分,但由于某种原因无法正常工作,我具有当前和预期的输出,我在做什么错?如何解决?
chiprev = ['4355b3','4364a1','4278b3']
for rev in chiprev:
print rev.split("[a-b][A-B]")[-1]
当前输出:-
4355b3
4364a1
4278b3
预期的输出:-
b3
a1
b3
答案 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)
您正尝试在ab
或AB
上使用正则表达式进行拆分,因此可以使用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])