我正在尝试使用各种字符作为分隔符来拆分字符串,并将这些分隔符保留在它们自己的数组索引中。例如说我想拆分字符串:
if (x>1) return x * fact(x-1);
使用'(', '>', ')', '*', '-', ';'和 '\s' 作为分隔符。我希望输出为以下字符串数组:{"if", "(", "x", ">", "1", ")", "return", "x", "*", "fact ", "(", "x", "-", "1", ")", ";"
目前我使用的正则表达式是
split("(?=(\\w+(?=[\\s\\+\\-\\*/<(<=)>(>=)(==)(!=)=;,\\.\"\\(\\)\\[\\]\\{\\}])))")
在每个单词字符处拆分,而不管它后面是否跟有一个定界符。例如
test + 1
输出 {"t","e","s","t+","1"} 而不是 {"test+", "1"}
为什么它会在每个字符处拆分,即使该字符后面没有我的分隔符之一?还有一个正则表达式,它甚至可以在 Java 中实现吗? 谢谢
最佳答案
好吧,您可以使用环视在 个字符之间的点处进行拆分,而无需使用分隔符:
(?<=[()>*-;\s])|(?=[()>*-;\s])
这将在每个分隔符前后创建一个分割点。不过,您可能需要从结果数组中删除多余的空白元素。
快速 PowerShell 测试(|
标记分割点):
PS Home:\> 'if (x>1) return x * fact(x-1);' -split '(?<=[()>*-;\s])|(?=[()>*-;\s])' -join '|'
if| |(|x|>|1|)| |return| |x| |*| |fact|(|x|-|1|)|;|
关于java - 基于正则表达式拆分字符串但保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13373608/