Python 提取两个模式之间的子字符串,不包括浮点数

Python extract sub string in between two pattern excluding floating number

我正在使用 python 2. 我需要替换字符串中的两个部分。例如下面的内容

str1 = "product,price=(decimals=4, value=7.505),quantity"
str2 = "product,(subporduct,(price=(decimals=4, value=7.05)),quantity"
str3 = "product,(subporduct,item=2, price=(decimals=4, value=7.05)),quantity"

我需要这样的输出,即价格等于浮点数

  1. 产品,价格=7.505,数量
  2. 产品,(子产品,(价格=7.05),数量
  3. 产品,(子产品,项目=2,价格=7.05),数量

我试过了,但它留下了最后一个括号,否则对我来说已经足够了。

print(re.sub("(?<=price=).+?(?<=value=)", "", str1))

我需要 python 2

中的解决方案

您可以使用

re.sub(r'(price=)\([^()]*?value=([\d.]+)\)', r'', str1)

regex demo详情:

  • (price=) - 第 1 组 (</code>):<code>price= 子串
  • \( - 一个 ( 字符
  • [^()]*? - () 以外的零个或多个字符尽可能少
  • value= - 文字子串
  • ([\d.]+) - 第 2 组 (</code>):一个或多个数字或 <code>. 个字符
  • \) - ) 个字符。

替换是第 1 组和第 2 组值的串联。