我有以下场景,我需要从字符串中提取RAM值,如下所示:
1GB, 4GB ROM Android 5.1 3G
RAM
值为1GB
Currenlty,我使用以下正则表达式:
(\d+(?:\.\d+)?)\s?([Gg])[Bb]
但是,在这种情况下,我还会获得与4GB
值对应的ROM
值。如何编写正则表达式,以便在ROM
字后跟不匹配?
谢谢
答案 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