2

我在解决这个问题时遇到了问题:http ://regexone.com/lesson/13

我试图做类似的事情:(\d+x\d+)

但为什么它不起作用?无论如何,我们如何使用“分组”?谢谢!

input text  required capturing group result
1280x720    1280, 720
1920x1600   1920, 1600
1024x768    1024, 768
4

3 回答 3

1

捕获组用括号().

在您的 regex(\d+x\d+)中,有一个捕获组 - 整个\d+x\d+事物,因为整个 regex 都被一个捕获组包围。

特别是在那个问题中,您想获得两个单独的数字。因此,一组应“捕获”一个数字,另一组“捕获”另一个数字。

因此,对于第一组,您将仅捕获第一个数字(字符序列) - (\d+)。第二个也是一样。

此外,您不需要x,因此您可以将其放在任何捕获组之外。

因此,(\d+)x(\d+)将是你想要的。

于 2013-02-11T03:10:34.163 回答
1

该练习是关于捕获组的。要求是分别捕获两个数字序列,并跳过x,如下所示:

(\d+)x(\d+)

另一方面,您的解决方案将整个输入捕获到由括号表示的单个捕获组中。

当您需要处理正则表达式捕获的输入的各个部分时,捕获组的概念非常重要,而不是处理整个捕获。在链接的示例中,您可以获取分辨率的水平分量的第一组,以及分辨率的垂直分量的第二组。如果没有两个单独的捕获组,您将需要x在代码中找到并进行额外的拆分。

于 2013-02-11T03:10:41.323 回答
1

您想要匹配两个特定的东西 - x 和 y 分辨率。这意味着,您需要两组。

所以,你知道你需要:()()

您不希望捕获 x 并且 x 位于您想要捕获的内容之间: ()x()

最后,我们需要填写我们要搜索的内容。我们需要一个或多个(+) 数字 (\d)。因此,完成的正则表达式为:

(\d+)x(\d+)

于 2013-02-11T03:12:15.273 回答