gpt4 book ai didi

JAVA 使用匹配器/模式查找字符串中括号包围的部分

转载 作者:行者123 更新时间:2023-11-30 12:02:01 25 4
gpt4 key购买 nike

我在用这个

Matcher m = Pattern.compile("-?\\d+(\\.\\d+)").matcher(strings);
while(m.find()) {
double value = Double.parseDouble(m.group());
sb.append(value);

几行字符串可能看起来像这样

  • 某人姓名 9/9/2019 209 (20.00) 0.00

  • 别人的名字9/8/2019 310 30.00 0.00

  • 他人姓名 7/20/2019 220 (10.00) 0.00

通常我会得到这样的输出

20.000.00

30.000.00

10.000.00

它在大多数情况下工作正常,但我试图找到可能或可能不被(括号)包围的数字,并让我的输出包括那些(括号)我想知道它是否像改变这部分一样简单
("-?\\d+(\\.\\d+)")

我试过使用\p{Punct}? 开头和结尾;显然,那是行不通的。

最佳答案

尝试匹配以下正则表达式模式:

(?<![^\s()])\d+(?:\.\d+)?(?![^\s()])

Java代码:

String input = "Someones name 9/9/2019 209 (20.00) 0.00\nSomeones else's name 9/8/2019 310 30.00 0.00\nAnother persons name 7/20/2019 220 (10.00) 0.00";
Pattern r = Pattern.compile("(?<![^\\s()])\\d+(?:\\.\\d+)?(?![^\\s()])");
Matcher m = r.matcher(input);
while (m.find()) {
System.out.println(m.group(0));
}

这打印:

209
20.00
0.00
310
30.00
0.00
220
10.00
0.00

这里是正则表达式的解释:

(?<![^\s()])  ensure that a word boundary precedes, including space or parentheses
\\d+ match one or more digits
(?:\\.\\d+)? match an optional decimal component
(?![^\s()]) ensure another word boundary follows

关于JAVA 使用匹配器/模式查找字符串中括号包围的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59005736/

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