正则表达式否定了整个单词

时间:2016-12-14 15:49:26

标签: java regex

我有以下场景,我需要从字符串中提取RAM值,如下所示:

1GB, 4GB ROM Android 5.1 3G

RAM值为1GB

Currenlty,我使用以下正则表达式:

(\d+(?:\.\d+)?)\s?([Gg])[Bb]

但是,在这种情况下,我还会获得与4GB值对应的ROM值。如何编写正则表达式,以便在ROM字后跟不匹配?

谢谢

2 个答案:

答案 0 :(得分:5)

使用否定前瞻

(\d+(?:\.\d+)?)\s?([Gg])[Bb](?!\s?[Rr][Oo][Mm])

(?!\s?[Rr][Oo][Mm])部分表示以下字符串不得与\s?[Rr][Oo][Mm]匹配。

您可能需要考虑使用Pattern.CASE_INSENSITIVE标志而不是字符组,顺便说一句。

答案 1 :(得分:1)

您可以使用以下否定前瞻:

(?i)\d+Gb(?!\s*ROM)

它将匹配数字后跟Gb但不匹配ROM