【发布时间】:2018-07-07 16:48:55
【问题描述】:
让我首先提到这是一个很好讨论的问题,我已经经历了几个线程,包括这两个 - 最接近匹配 Regex to match a string not followed by some string 和 A regex to match a substring that isn't followed by a certain other substring 但他们没有解决我的问题。
我有包含以下几种不同格式的数量和数量的字符串,例如6 X 200ml 表示 6 包,每包 200 毫升。在这个例子中我只想提取像 6 这样的数量
示例
- blah 6 X 200ml -- 6
- blah 200 mlX 6 -- 6
- blah x 5000 ml -- 0 或更好 1
- blah x 500000ml -- 0 或更好 1
- 等等 5mlX10 -- 10
- blah 500 mlX 10 -- 10
这是我迄今为止尝试过的,但没有任何成功
(X\s*\d+|\d+\s*X)(?!\s*ml)
它也匹配不应该匹配的 case #3 和 4。我也可以用乘号提取像 6 这样的数量,例如 6 X 而不是 6。我可以替换它。
【问题讨论】:
-
不会
this工作 -
不。例如,当我包含一个否定的 loo-ahead 时,我会收到以下错误。错误:重复运算符之前的正则表达式无效。解析正则表达式片段时出错:'*(\d)\b(?>>>HERE>>>!\s+ml)) ...
-
您的数据库是什么(Oracle、MySql、PostgreSQL、MSSQL)? REGEXP 支持在不同的数据库中是不同的,在许多数据库中它是有限的并且不支持许多功能,例如环视。很难不知道您使用的是哪个数据库。
-
它的 Amazon Redshift 并且由于 redshift 使用 PostgreSQL,如果它可以在 Postgres 上运行,它可能会在 Redshift 上运行
-
@Gurman 为什么要删除你的答案,这是一个很好的答案,只是我的错误没有提到它是一个 SQL 问题。可能您的回答会对其他人有所帮助
标签: sql regex amazon-redshift regex-negation regex-lookarounds