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

pan*_*los 1 java regex

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

1GB, 4GB ROM Android 5.1 3G
Run Code Online (Sandbox Code Playgroud)

RAM值是1GB

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

(\d+(?:\.\d+)?)\s?([Gg])[Bb]
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我也得到与该4GB值对应的ROM值.如何编写正则表达式,以便在ROM单词后面不匹配?

谢谢

fab*_*ian 5

使用负向前瞻

(\d+(?:\.\d+)?)\s?([Gg])[Bb](?!\s?[Rr][Oo][Mm])
Run Code Online (Sandbox Code Playgroud)

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

你可能想考虑使用Pattern.CASE_INSENSITIVE标志而不是字符组,顺便说一句.