匹配特定字符前后的正则表达式

3
我试图制作一个分隔符正则表达式(用于 java.util.Scanner),该表达式在空格上对字符串进行分割,同时将冒号、左括号和右括号保留为单独的标记。也就是说,foo(a:b) 应该被分割成标记 foo(a:b)
我目前最好的尝试是模式 "\\s+|(?=[(:])|(?<=[:)])",但由于某种我无法理解的原因,它无法匹配开括号和闭括号之间的内容,但可以在冒号的两侧正确匹配。

尝试使用\s+|(?=[():])|(?<=[:(]),请访问https://regex101.com/r/9pSfWr/1 - The fourth bird
似乎你只需要将两个括号都包含在字符类中, "\\s+|(?=[():])|(?<=[:()])" - Wiktor Stribiżew
1个回答

2

如果您需要这些单独的部分,您可以扩展字符类,断言左侧的一个字符[(:)],如果这是整个字符串,则在右侧断言字符[(:]

如果您还想匹配最后一个右括号后面的位置,则这两个字符类可以相同[(:)]

\s+|(?=[(:)])|(?<=[(:])

正则表达式演示 | Java演示

示例代码

String s = "foo(a:b)";
Scanner scanner = new Scanner(s).useDelimiter("\\s+|(?=[(:)])|(?<=[(:])");
while(scanner.hasNext())
{
    System.out.println(scanner.next());
}

输出

foo
(
a
:
b
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接