从正则表达式编号搜索中排除%

时间:2016-12-12 05:14:31

标签: regex

我正在尝试创建一个只找到2位整数或精度为2位小数的正则表达式。

在底部的示例字符串中,我只想找到以下内容:

21和10.50

使用此表达式,除了我想要捕获的字符串外,还会捕获100%:

(\d){1,2}(\.?)([0-9]?[0-9]?){1,2}

我知道我需要在某处使用^%,但我无法弄清楚它在哪里。非常感谢任何建议。

这是我的示例字符串:

每小时最高赚21美元 - 用!!提供食物!  送货司机在他们想要的时候工作,并在他们这么做时赚很多钱。

所有订单都已预付,只需将它们拿起并送到饥肠辘辘的食客。没有排队等候或没有收据和预付卡。

开始工作快速而轻松。立即开始。

立即申请

为什么选择?

订单数量超过任何其他外卖平台

我们100%的餐厅都是官方合作伙伴

有竞争力的薪酬:每笔订单费+里程+提示

我们保证每小时最低10.50美元/小时*

创建自己的日程安排&按你想要的时间工作

3 个答案:

答案 0 :(得分:2)

正则表达式中的单词边界将为您提供更多控制权。

由于字边界有点严格,我们需要引入OR条件来解决两个满足你的正则表达式的情况。

(\b[\d]{2}\.[\d]{2}\b)|(\b[\d]{2}\b)

编辑:试试这个,

\b[\d]{2}\b(\.[\d]{2})?

第一个例子有可能失败,因为它是短路的方式依赖于顺序。我相信这应该适当地处理多个案件。

答案 1 :(得分:2)

我认为这应该有效:

(?<!\d)((\d+\.\d\d)|(\d\d))(?!%|\d)

Demo (and explanation)

修改

改进版本:

(?<!\d)(\d{1,2}(?:\.\d{1,2})?)(?!%|\d)

Demo (and explanation)

答案 2 :(得分:1)

您可以尝试以下变体:(\d{1,}|[\d.])\b(?!%)
它使用negative lookahead (?!%)排除%符号后面的数字。

Details at regex101