正则表达式查询顺序

时间:2014-02-15 00:02:45

标签: regex google-sheets

任何人都可以帮我解决我遇到的问题吗?非常熟悉Google Spreadsheet但不熟悉正则表达式。

我有一个功能

=REGEXEXTRACT(A1, ".*\/(\w+)\/(\w+)\/")

所以为了论证,A1 =

google.com/structure1/structure2/structure3/page.php

它吐出B1'Structure2'和C1'Structure3'。

理想情况下,我想要的是B1中的'Structure3'和C1中的'Structure2'。

我知道我可以让D1 = B1,但我想弄明白。

正则表达式是从google和SO搜索生成的,我并不完全理解。

我想要实现的是在A列中输入一系列或URL,然后基本上获得它。

如果我有

,则上述正则表达式不起作用
google.com/page.php

任何帮助表示感谢。

编辑:我猜测一个剧本必须为最后一个问题做出准备,但我正在努力弄清楚如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

REGEXEXTRACT是一个内置函数,它接受两个参数:输入值位置和正则表达式。然后,它按顺序将捕获的组(括号内的部分)放在下一个单元格中。您无法更改该行为,因为您无法编辑内置函数的代码。如果您想D1 = B1之前structure3,那么structure2是最好的选择。

该正则表达式与google.com/page.php不匹配。你期望的行为是什么?如果您希望它始终匹配,请尝试使URL中的额外结构可选,如下所示:

".*(?:\/(\w+))?(?:\/(\w+)\/)?"

(?:foo)是一个非捕获组(即它不会被放入B1)。 (?:bar)?使非捕获组可选。

答案 1 :(得分:0)

我想出了一个使用自定义功能的替代解决方案。

现在没有办法优雅或优化,但现在正在完成工作

function parent(w) {
var string = w.split("/");
var components = w.split("/").length;
var parent = components-2;
var child = string[parent];
return (child);
}

function child(w) {
var string = w.split("/");
var components = w.split("/").length;
var parent = components-1;
var child = string[parent];
return (child);
}

将数组包装在数组中,计算数组,然后拉出最后一个组件和字符串的倒数第二部分。