簡體   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