如何从url中提取id? Google表格

时间:2017-08-07 04:37:35

标签: java string url google-sheets-api

我有以下网址。

https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258
https://docs.google.com/a/example.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY/edit#gid=1842172258
https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY

Foreach网址,我需要将工作表ID:1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY提取到java字符串中。

我正在考虑使用拆分,但它不适用于所有测试用例:

String string = "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258";
String[] parts = string.split("/");
String res = parts[parts.length-2];
Log.d("hello res",res );

我怎么可能?

4 个答案:

答案 0 :(得分:3)

您可以使用正则表达式\/d\/(.*?)(\/|$)regex demo)来解决您的问题,如果您仔细观察,可以看到d//之间存在ID或{{ 1}}为此你可以得到它之间的所有东西,检查这个代码演示:

end of line

<强>输出

String[] urls = new String[]{
    "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258",
    "https://docs.google.com/a/example.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY/edit#gid=1842172258",
    "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY"
};

String regex = "\\/d\\/(.*?)(\\/|$)";
Pattern pattern = Pattern.compile(regex);

for (String url : urls) {
    Matcher matcher = pattern.matcher(url);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }
}

答案 1 :(得分:1)

看起来您要查找的ID始终遵循“/ spreadsheets / d /”,如果是这样的话,您可以将代码更新为

        String string = "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258";
        String[] parts = string.split("spreadsheets/d/");
        String result;
        if(parts[1].contains("/")){
            String[] parts2 = parts[1].split("/");
            result = parts2[0];
        }
        else{
            result=parts[1];
        }
        System.out.println("hello "+ result);

答案 2 :(得分:0)

使用正则表达式

Pattern pattern = Pattern.compile("(?<=\\/d\\/)[^\\/]*");
Matcher matcher = pattern.matcher(url);
System.out.println(matcher.group(1));

使用Java

String result = url.substring(url.indexOf("/d/") + 3);
int slash = result.indexOf("/");
result =  slash == -1 ? result
                      : result.substring(0, slash);
System.out.println(result);

答案 3 :(得分:0)

Google使用固定长度字符作为ID,在您的情况下,它们是44个字符,而这些字符是Google使用的字符:字母数字,-和_,因此您可以使用此正则表达式:

regex = "([\w-]){44}"
match = re.search(regex,url)