如何使用正则表达式识别字符串中的十进制值



我有以下SHAKE LQ 1.30 ML (60 MG) PO QD FOR 7 DAYS THEN DR,并试图只识别30 ML

我已经尝试了以下内容,但捕获了1.30 ML中的30

((30|45|60)(s)?(ML))

我怎么能不捕获十进制值的整数组合。

您想从像SHAKE LQ 30 ML (60 MG)这样的字符串中提取30 ML,并在像SHAKE LQ 1.30 ML (90 MG)这样的字符串中检测到不匹配。

您可以使用

(?<!d)(?<!d.)((30|45|60)s?(ML))b

查看正则表达式演示

  • (?<!d)(?<!d.)-.在 数
  • ((30|45|60)s?(ML))- 捕获组 1:
    • (30|45|60)- 捕获组 2:304560
    • s?- 可选的空格
    • (ML)- 捕获组 3:ML
  • b- 单词边界。

十进制是:

d+.d{2}s

解释:

d number
+ one or more preceding character
. literal dot
{2} exactly two preceding characters
s white space

编辑。 非十进制为:

[^.]d{2}s

JavaScript 中的示例:

s1='SHAKE LQ 30 ML (60 MG) PO QD FOR 7 DAYS THEN DR';
s2='SHAKE LQ 1.30 ML (60 MG) PO QD FOR 7 DAYS THEN DR';
r=/[^.]d{2}s+ML/
console.log(r.exec(s1)); //returns 30ML in array
console.log(r.exec(s2));  //returns null

尝试d?.d+(*SKIP)(?!)|((30|45|60)s?(ML))

演示

如果不支持 pcre

试试(?<![d.])((30|45|60)s?(ML))

演示

最新更新