我正在努力使用正则表达式来查找此行中管道 {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/