regex 如何在java中从String中获取所需格式的子字符串?

yqlxgs2m  于 2023-05-23  发布在  Java
关注(0)|答案(3)|浏览(210)

我有下面格式的字符串。

"resourceId=/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name/i=xxxxxxxxx/y=2021/m=03/d=13/h=15/m=00/PT1H.json"

我尝试以下面的方式获取子字符串,理想情况下基于“/”拆分字符串,并获取字符串的第一部分,直到resource_name:

/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name

如何在java中使用substring或regEx来实现这种格式?

已编辑

在给定的字符串中,resource_name将替换为vm_name或akv_name。字符串中永远不会是resource_name,已给出通用名称。
基本上,我需要从一开始就一直到virtualMachines,并获取resource_name,它被一个斜杠附加在virtualMachines后面
那么在这种情况下。怎么处理?

rryofs0p

rryofs0p1#

有几种方法可以做到这一点。
您可以使用PatternMatcher,通过正则表达式捕获来隔离数据。
或者,您可以使用replace过程删除不需要的数据。
或者,最后,您可以使用indexOf过程来获取substring方法的结束索引。
由于简单,我推荐最后一个选项。
考虑下面的方法parse,该方法将String值作为第一个参数,将开始和结束String值作为第二个和第三个参数。

String parse(String string, String start, String end) {
    int indexOf = string.indexOf(start);
    return string.substring(indexOf, string.indexOf(end) + end.length());
}

下面是它的用法示例。

String string = "resourceId=/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name/i=xxxxxxxxx/y=2021/m=03/d=13/h=15/m=00/PT1H.json";
String value = parse(string, "subscriptions", "resource_name");
System.out.println(value);

输出量

subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name
ljo96ir5

ljo96ir52#

我有两个解决办法。使用indexOf:

String input = "resourceId=/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name/i=xxxxxxxxx/y=2021/m=03/d=13/h=15/m=00/PT1H.json";

// Find the index of "resource_name"
int endIndex = input.indexOf("/resource_name");

// Extract the substring until "resource_name"
String substring = input.substring(0, endIndex);

System.out.println(substring);

使用replaceAll:

String input = "resourceId=/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name/i=xxxxxxxxx/y=2021/m=03/d=13/h=15/m=00/PT1H.json";

String regex = "/resource_name.*$";
String substring = input.replaceAll(regex, "");

System.out.println(substring);

在我看来,它工作得很好。希望这些能给予你帮助。

js4nwp54

js4nwp543#

你可以这样做

String sample = "resourceId=/subscriptions/subscription_id/resourceGroups/rg_name/providers/Microsoft.Compute/virtualMachines/resource_name/i=xxxxxxxxx/y=2021/m=03/d=13/h=15/m=00/PT1H.json";
 StringBuilder subString = new StringBuilder(sample.substring(11, sample.indexOf("/i=xxxxxxxxx"));
 String endString = sample.substring(sample.indexOf("/i=xxxxxxxxx"));
 int lastIndex=subString.lastIndexOf("/");
 new StringBuilder(subString.replace(lastIndex,subString.length(),"/vm_name").append(endString));

相关问题