繁体   English   中英

如何正则表达式匹配多个项目

[英]How to regex match multiple items

我有一个reviews表如下:

r_id 评论
1 重量不能超过 40 公斤
2 您不得使重量 go 超过 31 公斤
3 不要excel 94kg以上
4 最佳重量为 45 公斤
5 不要excel 62公斤以上
6 重量不能超过7000g

我想要 select 是r_id不能超过的重量。 所以我想要的 output 是

r_id 最大重量
1 40
2 31
3 94
5 62

如您所见,不包括r_id 4,因为它没有达到最大重量,并且不包括6 ,因为它以克为单位。 我正在为两件事而苦苦挣扎。

  1. 有多个短语,我如何在我的正则表达式列中进行OR运算符检查。
  2. 有时kg数写成 40 40kg40 KG公斤、 40 kg或 40 40kilos 虽然所有事物都是kilograms ,但kg的书写方式不同。 我怎样才能只提取数字(但确保kg以上述方式之一写入,所以我不会意外提取4000g之类的东西。

SELECT
  r_id,
  REGEX_SUBSTR(REGEX_SUBSTR('cannot exceed [0-9]+ kg'), '[0-9]+ kg')) as "max weight"
FROM reviews;

我的陈述只检查一种特定类型的句子,不检查数字是否以公斤为单位。

您可以从字符串中提取数字。 似乎只有一个,然后检查字符串是否看起来像某些模式:

select regexp_substr(comm, '[0-9]+')
from reviews
where regexp_like(comm, '(exceed|go over|above).*[0-9]+ ?(kg|k.g)');

是一个 db<>fiddle。

您可以使用更强大的正则表达式来提取数字。

我没有 oracle DB,但尝试类似:

SELECT
  r_id,
  REGEX_SUBSTR(comment, '([0-9]+) ?(k\.?g\.?|kilos)', 1, 1, 'i') as "max weight"
FROM reviews;

您可以在https://regex101.com/r/07Rstk/1看到此正则表达式与给定字符串匹配。 这也解释了正则表达式的含义。

我们还打开不区分大小写的标志,以便正确处理任何大小写。 https://docs.oracle.com/cd/E18283_01/olap.112/e17122/dml_functions_2069.htm

编辑:要检查是否超出,go 等。请注意,我们已将 position 参数从 1 更改为 2,因为我们现在关心第二个捕获组。

SELECT
  r_id,
  REGEX_SUBSTR(comment, '(exceed|go over|above)\h*([0-9]+) ?(k\.?g\.?|kilos)', 1, 2, 'i') as "max weight"
FROM reviews;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM