如何用python中的字符串中提取数字?

时间:2016-10-10 15:40:28

标签: python regex string reddit

我有一个项目,我可以提取一些subreddit(/ r / buildapcsales)的帖子,并通过电子邮件向我发送一些优惠。

例如:

  1. [显示器] AOC 21.5“1080p 75Hz 1ms FreeSync显示器 - $ 105 ($ 229.99 - $ 110促销 - 15美元促销至10月13日)
  2. [显示器] EQD Auria EQ278CG 27英寸144hz 1080p 3ms - $ 149.99 (Newegg Flash)
  3. [显示器] EQD Auria EQ248CG 24英寸144hz 1080p 3ms - $ 128.99 (Newegg Flash)
  4. [显示器] Acer CB280HK 4k TN 1ms 60hz - $ 249.99 ($ 449.99 - $ 200即时回赠)
  5. [显示器] Acer K272HUL Ebmidpx 27“2560 x 1440 1ms VESA可安装 - $ 239.99 (60美元折扣)
  6. 我想拉出粗体数字并将它们与阈值(< = 200)进行比较,但问题是我无法使用正则表达式,因为这将在右侧拉出计算(即$ 449.99 - $ 200即时回扣)还

    还有另一种更聪明的方法吗?我完全迷失了。

1 个答案:

答案 0 :(得分:2)

  

我不能使用正则表达式,因为这样会在右侧拉出计算结果(即$ 449.99 - $ 200即时回扣)。

您仍然可以使用正则表达式并提取破折号后面的第一笔金额

import re

lines = [
    '1. [Monitor] AOC 21.5" 1080p 75Hz 1ms FreeSync Monitor - $105 ($229.99 - $110 sale - $15 promo thru 10/13)',
    '2. [Monitor] EQD Auria EQ278CG 27 inch 144hz 1080p 3ms - $149.99 (Newegg Flash)',
    '3. [Monitor] EQD Auria EQ248CG 24 inch 144hz 1080p 3ms - $128.99 (Newegg Flash)',
    '4. [Monitor] Acer CB280HK 4k TN 1ms 60hz - $249.99 ($449.99 - $200 Instant Rebate)',
    '5. [Monitor] Acer K272HUL Ebmidpx 27” 2560 x 1440 1ms VESA Mountable - $239.99 ($60 off)'
]

pattern = re.compile(r"- \$(\d+)")
for line in lines:
    print(pattern.search(line).group(1))

打印:

105
149
128
249
239