在Python中使用正则表达式提取字符串的一部分

在Python中使用正则表达式提取字符串的一部分,python,regex,pandas,data-science,extract,Python,Regex,Pandas,Data Science,Extract,我是一名从事数据科学项目的学生,我需要从我的数据框架的一列中提取一部分。 数据帧如下所示: 我想从“hotVideohot0501007107FilmVidéoClub”这样的字符串中提取部分hotVideo 因此,我使用如下正则表达式编写了此指令: facturation['annotation']=facturation['annotation'].str.findall('([A-Z0-9]{3}\d+))。apply('.join) 它正确地提取所有内容,除了有时我有这样的字符串:“C

我是一名从事数据科学项目的学生,我需要从我的数据框架的一列中提取一部分。 数据帧如下所示:

我想从“hotVideohot0501007107FilmVidéoClub”这样的字符串中提取部分hotVideo

因此,我使用如下正则表达式编写了此指令:
facturation['annotation']=facturation['annotation'].str.findall('([A-Z0-9]{3}\d+))。apply('.join)

它正确地提取所有内容,除了有时我有这样的字符串:“CTVCanalVODCTv200052670CTV02000052670”,它返回CTV00200052670CTV02000052670,但只希望第一次出现:


有人能帮我解决这个问题吗:)

我想问题出在你的apply+join和findall方法上,因为你在数据中匹配了2次这个模式,接下来你就加入了它。findall为您返回列表。从列表中,您只需要第一项,而不是全部。

谢谢所有帮助我的人:)我找到了答案:

facturation['annotation']=facturation['annotation'].str.findall('([A-Z0-9]{3}\d+))。apply('.join)


facturation['annotation']=facturation['annotation'].str.extract(“(.{0,13})”

有一个与之无关的@okpython。这个问题的原因是正则表达式模式本身。之所以这样做是因为对该模式所做的工作。那么为什么要使用
findall
?使用
extract
str.extract(r'([A-Z0-9]{3}\d+)
我已经尝试使用
extract
,它修复了问题,但导致了另一个问题。也就是说,它只能从像MFEMETROPOLITANMFE05UH622455AlaskaHD这样的字符串中提取MFE05。这就是我使用
findall
的原因,因为它会返回所有匹配项:(关于
str.extract(r'([A-Z]{1,3}\d{3,})
?或者
str.extract(r'([A-Z]{2,3}\d{3,})