如何使用 java 正则表达式来完成像 sed 这样的工作?

How to use java regex to do job like sed?

提问人:Troskyvs 提问时间:7/13/2022 更新时间:7/13/2022 访问量:159

问:

例如,我有一个输入字符串:

2 + 5* 61.2 -(32.5+7)/ 8

我想将此字符串拆分为小数和运算符(+-*/和括号)的标记,删除空白(空格和制表符),在两者之间添加逗号。预期输出:

2,+,5,*,61.2,-,(,32.5,+,7,),/,8

我知道我可以通过一个命令在 sed 中做到这一点:

sed -E 's/ |\t//g;s/([-\+\*\/)(])/,\1,/g;s/,+/,/g'

我的问题:如何使用java正则表达式来实现这一点?我看到 java 正则表达式更用于“匹配/过滤”已知模式,它可以像 sed 一样进行“编辑”吗?

感谢您的解决方案,谢谢。

Java 正则表达式 SED 匹配 令牌

评论

0赞 Thomas 7/13/2022
Sed 将以相同的方式使用正则表达式,并且可能在内部进行编辑。当然,如果需要,您可以在 Java 中提取标记并将它们组合成一个新字符串。
0赞 Yurii 7/13/2022
为此,您可以使用 string.split()。芦苇:stackoverflow.com/questions/9856916/java-string-split-regex
1赞 David Conrad 7/13/2022
这不是一个 sed 命令,而是三个 sed 命令。

答:

1赞 Alexey R. 7/13/2022 #1

你可以通过遍历正则表达式的匹配位置来做到这一点,比如:

public static void main(String[] args) throws URISyntaxException {
    String input = "2 + 5* 61.2 -(32.5+7)/ 8";
    Pattern p = Pattern.compile("\\d+(?:\\.\\d+)?|[()+\\-\\*\\/]{1}");
    Matcher m = p.matcher(input);
    while(m.find()){
        System.out.println(m.group());
    }
}

免责声明:给出的正则表达式适合您的特定示例,但可能需要返工以支持更通用的情况。