gpt4 book ai didi

java正则表达式从具有两个方差的字符串中提取数字

转载 作者:行者123 更新时间:2023-11-30 01:49:00 26 4
gpt4 key购买 nike

我需要编写一个从字符串中提取股票代码的java程序。字符串有两个变体,这个:

Market participants are requested to note that stock with code 83199 has single counter (stock code: 83199) trading in USD.

或者这个:

Market participants are requested to note that stock with code 83199 has multiple counters (stock codes: USD counter: 3199, EUR counter: 83199 and SWF counter: 9199) trading in their corresponding currency.

我需要提取括号内的所有数字并忽略括号外的数字。通过阅读此处类似问题的答案,我在这种模式的第一个差异方面取得了一些成功:

Pattern.compile("(?<=stock\\s{1,2}code:\\s{1,2})[0-9]*(?=\\))");

但不知道如何为第二个方差编写模式。如果可能的话,我更喜欢对两者使用单一模式。我将不胜感激任何帮助。预先感谢您。

最佳答案

您可以使用

(?:\G(?!^)|\(stock)[^()\d]*(\d+)(?=[^()]*\))

请参阅regex demo

详细信息

  • (?:\G(?!^)|\(stock) - 上一场比赛结束或 (stock
  • [^()\d]* - 除 ( 之外的任何 0 个或多个字符, )和数字
  • (\d+) - 第 1 组:一位或多位数字(也使用 \d+(?:\.\d+)? 来匹配浮点值)
  • (?=[^()]*\)) - 正向前瞻,需要除 ( 之外的任何 0+ 字符和)然后)紧邻当前位置的右侧。

Java demo :

String s = "Market participants are requested to note that stock with code 83199 has multiple counters (stock codes: USD counter: 3199, EUR counter: 83199 and SWF counter: 9199) trading in their corresponding currency.";
Pattern pattern = Pattern.compile("(?:\\G(?!^)|\\(stock)[^()\\d]*(\\d+)(?=[^()]*\\))");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
}
// => 3199, 83199, 9199

关于java正则表达式从具有两个方差的字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56785952/

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