首页 > 解决方案 > 如何使用负后向排除分数?

问题描述

我有一个需要解构为数量(数字)和单位(字符串)的测量列表。像

1 gal.
500lbs
none
2.25gal
4feet twine
2lbs regular and 2lbs lite

一切都很好,很好用\d+(\.\d+)?,但现在我有一小部分加入:

3/4gal

我需要从这个搜索中排除分数,以便我可以单独处理它。我3通过插入负前瞻成功排除了分子 ( ) \d+(?!\/)(\.\d+)?,但我不知道如何排除分母 ( 4)。我想我应该使用负面的lookbehind,但我不知道如何。 \d+(?!\/)(?<!\/)(\.\d+)?并且\d+(?!\/)(\.\d+)?(?<!\/)仍然匹配4.

谢谢!

标签: regex-lookarounds

解决方案


在这样的结构\d+(?!\/)(?<!\/)(\.\d+)?中,后(?<!\/)视总是正确的,因为您之前唯一可以匹配(而不是断言)的是数字。

您还可以排除/数字部分左侧的 a,并在匹配小数部分后添加前瞻。

(?<!/)\d+(?:\.\d+)?(?!/)

解释

  • (?<!/)Negative lookbehind,直接断言当前位置左边不是/
  • \d+匹配 1+ 个数字
  • (?:\.\d+)?匹配一个可选的.和 1+ 位数字
  • (?!/)负前瞻,直接断言当前位置右边不是/

正则表达式演示


推荐阅读