gpt4 book ai didi

java - 用括号分割字符串

转载 作者:行者123 更新时间:2023-12-01 17:50:36 25 4
gpt4 key购买 nike

我有一个遵循此模式的字符串列表:

'Name with space (field1_field2) CONST'

示例:

'flow gavage(ZAB_B2_COCUM) BS'    
'flowWithoutSpace (WitoutUnderscore) BS'

我想提取:

  • 名称带有空格
  • 括号内的值
  • 括号后的 CONST 值

对于括号 () 内的字符串,我使用:

\(.*\)

不确定其他字段

最佳答案

您可以使用

String[] results = s.split("\\s*[()]\\s*");

请参阅regex demo

图案详细信息

  • \\s* - 0+ 个空格
  • [()] - )(
  • \\s* - 0+ 个空格

如果您的字符串始终采用指定的格式(无括号,(...),无括号),您将拥有:

Name with space                      = results[0]
The values inside the brackets = results[1]
The CONST value after the brackets = results[2]

如果您想要更受控制的方法,请使用匹配的正则表达式:

Pattern.compile("^([^()]*)\\(([^()]*)\\)(.*)$")

请参阅regex demo

如果将其与 Matcher#matches() 一起使用,则可以省略 ^$,因为该方法需要完整的字符串匹配。

Java demo :

String regex = "^([^()]*)\\(([^()]*)\\)(.*)$";
String s = "flow gavage(ZAB_B2_COCUM) BS";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
if (matcher.matches()){
System.out.println(matcher.group(1).trim());
System.out.println(matcher.group(2).trim());
System.out.println(matcher.group(3).trim());
}

这里,模式的含义是:

  • ^ - 字符串的开头(隐式在 .matches() 中)
  • ([^()]*) - 捕获组 1:除 () 之外的任何 0+ 个字符
  • \\( - 一个 (
  • ([^()]*) - 捕获组 2:除 () 之外的任何 0+ 个字符
  • \\) - 一个 )
  • (.*) - 捕获组 3:任何 0+ 个字符,尽可能多,直到行尾(使用 ([^()]*) 如果您也需要限制此部分中的 ())。
  • $ - 字符串结尾(隐含在 .matches() 中)

关于java - 用括号分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com