使正则表达式传递复杂化



我有一个表df,下面的列是字符串格式的"txt"。例如,


--这是第一条记录

多云

BB-连续53,连续26,每天7,总是6,总是4,总是3,永久2,持续雇佣1,永远1,从不1;104

1多云


--这是第二条记录

晴天

BB-Akkub 8;8

此处为额外字符串

1个阳光充足的


--这是第三条记录

雨天

BB-希西家85,希西家1,希基雅1;87

此处为额外字符串

1个雨天


我想使用正则表达式传递"BB-"之后的字符串,但只能传递到BB之后的最后一个数字。例如,我将使用的第一条记录:BB-连续53,连续26,每天7,总是6,总是4,总是3,总是2,连续就业1,永远1,从不1;104

第二个记录将是:BB-Akkub 8;8

第三个记录将是:BB-希西家85,希西家1,希西家一;87

最初,我尝试了以下代码

df['txt_parse'] = df['txt']
.apply(lambda x: " ".join(w.strip() for w in re.findall(r'BB - (.*?)rn', x)))
.str.split(';').str.get(0).str.split(', ')    

但问题是在第一个记录中;3〃;以及";永久的";有一个/n,所以它只解析字符串直到"n";每当3;而不是";从不为1;104";。

有什么解决这个问题的建议吗?

import re
a = """cloudy
BB - continually 53, continual 26, daily 7, always 6, alway 4, ever 3,
perpetual 2, continual employment 1, evermore 1, never 1; 104
1 cloudy"""
b = """sunny
BB - Akkub 8; 8
extra strings here
1 sunny"""
c = """rainy
BB - Hezekiah 85, Hizkiah 1, Hizkijah 1; 87
extra strings here
1 rainy"""
r = re.compile(r'(?s)(?=BB)(.+)(?<=d(?=.?n))')
for i in (a, b, c):
s = r.search(i).group()
print(s)

输出:

BB - continually 53, continual 26, daily 7, always 6, alway 4, ever 3,
perpetual 2, continual employment 1, evermore 1, never 1; 104
BB - Akkub 8; 8
BB - Hezekiah 85, Hizkiah 1, Hizkijah 1; 87

编辑:增加了一个额外的n

最新更新