java - 提取两个用空格填充的管道之间的数字

标签 java regex

我正在努力使用正则表达式来查找此行中管道 {1, 2, 3, 4, 5, 6 ...} 之间的数字匹配;

| 2021-08-18 01:28 | Twitter | [INTL TWITTER AAA BBB CC ] (https://twitter.c.xx-xx-2.aaaa.com/#/groups/123) | Twitter XX (C++, C#) | 1 | 2 | 3 | 4 | [ aaaa ] | 5 | 6 | 7 |

我最好的尝试是这个:

\| 2021-08-18 01:28 \| Twitter \| \[INTL TWITTER AAA BBB CC ] \(https:\/\/twitter\.c\.xx-xx-2\.aaaa\.com\/#\/groups\/123\) \| Twitter XX \(C\+\+, C#\) \| (\d+) \| (\d+) \| (\d+) \| (\d+) \| \[ aaaa ] \| (\d+) \| (\d+) \| (\d+) \| 

它实际上正在工作,但看起来编码非常困难......如果您能提出改进建议,我将不胜感激 提前致谢! :)

最佳答案

你可以使用

\|\s*(\d+)(?=\s*\|)

请参阅regex demo详细信息:

  • \| - 管道字符
  • \s* - 零个或多个空格
  • (\d+) - 第 1 组:一位或多位数字
  • (?=\s*\|) - 正向前瞻,匹配紧随其后的零个或多个空格和管道字符的位置。

请参阅Java demo :

String s = "| 2021-08-18 01:28 | Twitter | [INTL TWITTER AAA BBB CC ] (https://twitter.c.xx-xx-2.aaaa.com/#/groups/123) | Twitter XX (C++, C#) | 1 | 2 | 3 | 4 | [ aaaa ] | 5 | 6 | 7 |";
Pattern pattern = Pattern.compile("\\|\\s*(\\d+)(?=\\s*\\|)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 
// => 1, 2, 3, 4, 5, 6, 7

关于java - 提取两个用空格填充的管道之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68845941/

相关文章:

java - 在 JSF 2.0 应用程序中使用 RichFaces 4

java - 在 Heroku 上部署 Play Scala 应用程序

python - 在 python 正则表达式中,为什么 (h)* 和 (h)+ 不能产生相同的结果?

python - 使用正则表达式匹配特定的 Apache VirtualHost

java - 如何从 DAO 迭代多个数据

java - Hibernate 返回不匹配的行

java - 在 Bundle 测试中设置 EditText 不起作用

java - 无效的 java 正则表达式转义序列未在 Eclipse 中标记

php - (PHP5) 使用 PHP DOM 或正则表达式从 HTML 中提取标题标签和 RSS 提要地址

python - 替换正则表达式中的字符