Python 仅提取字母和第一个数字

Python 仅提取字母和第一个数字,python,regex,pandas,Python,Regex,Pandas,我正在使用一个包含字母、特殊字符和数字的数据框。我的目标是提取所有字母和第一个数字。所有数字总是出现在字母和特殊字符之后的末尾;但是,某些字母可能出现在特殊字符之后。请参见下面的示例: d={'col1':['A./B.1234','CDEF/G5','AB./C23']} df=pd.DataFrame(数据=d) 打印(df) #可乐 #公元前0年1234年 #1 CDEF/G5。 #2 AB./C23 我查找了许多变体,但不知道如何处理特殊字符/等 df.col1.str.extract

我正在使用一个包含字母、特殊字符和数字的数据框。我的目标是提取所有字母和第一个数字。所有数字总是出现在字母和特殊字符之后的末尾;但是,某些字母可能出现在特殊字符之后。请参见下面的示例:

d={'col1':['A./B.1234','CDEF/G5','AB./C23']}
df=pd.DataFrame(数据=d)
打印(df)
#可乐
#公元前0年1234年
#1 CDEF/G5。
#2 AB./C23
我查找了许多变体,但不知道如何处理特殊字符
/

df.col1.str.extract(“([A-Za-z\d]+)”)
#    0
#0 A
#1 CDEF
#2 AB
这给了我所有的字母和数字,直到它达到一个特殊的字符。最终,我希望得到以下输出:

AB1
CDEFG5
ABC2

我不熟悉正则表达式。

您需要提取第一个数字之前的所有字符,然后用空字符串替换任何非字母/数字字符:

d = {'col1': ['A./B. 1234', 'CDEF/G5.','AB./C23']}
df = pd.DataFrame(data=d)
df.col1.str.extract(r'^([^\d]+\d)').replace('[^A-Za-z0-9]', '', regex=True)
输出:

        0
0     AB1
1  CDEFG5
2    ABC2
另一种方法

s=df['col1'].str.extractall("([a-zA-Z0-9])")[0]
s[s.str.isalpha()|s.shift().str.isalpha()].sum(level=0)
0       AB1
1    CDEFG5
2      ABC2
Name: 0, dtype: object
import re

#create compiled regex... just makes it easier
pat1 = re.compile(r'[a-z]+', flags=re.IGNORECASE)
pat2 = re.compile(r'\d{1}')
#extract words and numbers
step1 = [''.join(pat1.findall(entry)) for entry in df.col1]
step2 = [pat2.search(entry).group() for entry in df.col1]

#combine words and numbers, withe the number trailing word(s)
[''.join(ent) for ent in zip(step1,step2)]

['AB1', 'CDEFG5', 'ABC2']