【发布时间】:2021-10-27 15:25:45
【问题描述】:
我有这样的字符串:
Bla bla 0.75 oz. Bottle
Mugs, 8oz. White
Bowls, 4.4" dia x 2.5", 12ml. Natural
Ala bala 3.3" 30ml Bottle'
我想提取在我的预定义前瞻之前出现的数值,在本例中为[oz, ml]
0.75 oz
8 oz
12 ml
30 ml
我有以下代码:
import re
import pandas as pd
look_ahead = "oz|ml"
s = pd.Series(['Bla bla 0.75 oz. Bottle',
'Mugs, 8oz. White',
'Bowls, 4.4" dia x 2.5", 12ml. Natural',
'Ala bala 3.3" 30ml Bottle'])
size_and_units = s.str.findall(
rf"((?!,)[0-9]+.*[0-9]* *(?={look_ahead})[a-zA-Z]+)")
print(size_and_units)
哪个输出这个:
0 [0.75 oz]
1 [8oz]
2 [4.4" dia x 2.5", 12ml]
3 [3.3" 30ml]
您可以看到我想要的输出与我从脚本中得到的不匹配。我认为我的正则表达式代码正在选择第一个数值和我定义的前瞻之间的所有内容,但是我只想要前瞻之前的最后一个数值。
我对正则表达式的理解不够。有人可以帮助解决这个问题。 谢谢!
【问题讨论】:
-
在
[0-9]+.*[0-9]*中,将.替换为\.。.表示任何字符。\.表示句号。
标签: python-3.x regex