【问题标题】:Python regex issue with negative numbers带有负数的 Python 正则表达式问题
【发布时间】:2016-01-31 04:36:57
【问题描述】:

我正在使用 Python 和 RobotFramework。在我的测试中,我抓取数字(字符串格式,如 $486,100、-23,000)并将它们转换为整数进行比较。

我对正数没有任何问题,我的正则表达式删除了美元符号和逗号,给我留下了一个数字。但是,对于负数,我的正则表达式也删除了“-”,因此该数字不再是负数。需要一个正则表达式,它既能保留所有数字,又能保留符号。

在 Selenium IDE 中,这个正则表达式可以正常工作:replace(/[^\\d-]/g, '')

但是,由于我在机器人中使用 python,这是我拥有的代码:

string_str = re.sub(r'\D', "", string_str) 

我环顾四周并尝试修改它:

string_str = re.sub(r'-?\D', "", string_str)

和:

string_str = re.sub(r'[-]?\D', "", string_str)

但到目前为止还没有成功。

【问题讨论】:

  • 您说要“抓取”数字,但实际上是在替换字符串中的字符。您的真正目标是进行字符串替换还是获取数字?您是否需要担心格式奇怪的字符串,例如 -10-20 或 4.5.6?
  • 我正在从网页上的表格中存储文本,“数字”是我需要转换为整数进行比较的字符串。它们都是美元金额,没有小数位(美分)。

标签: python regex python-2.7 selenium-webdriver robotframework


【解决方案1】:

您可以使用相同的正则表达式。

string_str = re.sub(r'[^-\d]', "", string_str)

【讨论】:

  • 成功了。我确定我已经尝试过,但我尝试了很多组合....一定错过了那个。
【解决方案2】:

我正在使用这种模式从字符串中提取数字作为列表:

text = 'fa lkjaf 3 889898 -9.09808 * 2.8999 +809003.22 -19 =2-3  =33-77-9.3'
import re
lt = re.findall('-?\d+\.?\d*',text)
print(lt)

['3', '889898', '-9.09808', '2.8999', '809003.22', '-19', '2', '-3', '33', '-77', '- 9.3']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多