[英]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
,因為它以克為單位。 我正在為兩件事而苦苦掙扎。
OR
運算符檢查。kg
數寫成 40 40kg
、 40 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.