如何从url中提取id?谷歌表

TSR*_*TSR 5 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
Run Code Online (Sandbox Code Playgroud)

Foreach url,我需要将工作表 id: 提取1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY到一个 java 字符串中。

我正在考虑使用split但它不能用于所有测试用例:

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 );
Run Code Online (Sandbox Code Playgroud)

我怎么可能呢?

YCF*_*F_L 5

您可以使用 regex \/d\/(.*?)(\/|$)( regex demo ) 来解决您的问题,如果您仔细观察,您可以看到 ID 之间存在d//或者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));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY
1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY
1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY
Run Code Online (Sandbox Code Playgroud)


Abd*_*139 1

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

        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);
Run Code Online (Sandbox Code Playgroud)