我一直在寻找这个问题的答案,但我没有得到明确的答案。
我有文字:
MSI GeForce GTX 1080 Ti DirectX 12 GeForce GTX 1080 Ti GAMING X 11G
我正在使用正则表达式
GTX +?\d+
返回结果GTX 1080
两次
我想只抓一场比赛然后退场。
是否有正则表达式会这样做?或者我是否需要将正则表达式框架用于我正在使用的语言?
答案 0 :(得分:2)
这只能抓住一场比赛并退场。为了清楚起见,它抓住了最后一场比赛,但它完成了你想要它做的事情。在regex101.com上测试
GTX +?\d+(?!.*GTX +?\d+.*$)
答案 1 :(得分:2)
@Tezra提出的方法应该有效,除了最后的$
标记可能是不必要的(它可能取决于你正在使用的正则表达式的风格)。 (GTX \d+)[\s\S]*
DEMO
此方法会将您的第一个匹配项隔离到一个捕获组中,您可以使用您选择的语言检索该捕获组。你没有指定一个,所以我就把它留在那里。 以下是第二种方法的内容:
查询(GTX \d+)
周围的括号将其放入第一个(也是唯一的)捕获组。
跟随[\s\S]
的括号内的组将匹配集合中的任何单个字符。由于所有字符必须是空格(\s
)或不是空格(\S
),因此结果就是任何内容。
最后,最后的*
量词将匹配前一组中的零个或多个连续字符,确保消耗掉字符串的剩余部分。
希望这有帮助。