在Java中应用sed替换表达式

pau*_*doo 2 java regex sed

我正在寻找一种采用sed替换表达式的方法,例如s/hello/world/(意味着将“ hello”的所有实例替换为“ world”),并将其应用于Java String。理想情况下,我希望支持其他sed功能,例如捕获组等,但并非绝对必要。

Java中是否有用于此类事情的好的库?


我可以尝试自己解析sed表达式,但我不想进入逃脱处理的老鼠巢。

Giu*_*ero 5

在Java中,您所需的replaceAll()方法是通过String类中内置的方法来完成的:

public String replaceAll(String regex,String replacement)
Run Code Online (Sandbox Code Playgroud)

文献资料

例:

String test1 = "hello world";
System.out.println(test1.replaceAll("hello","hi"));
//Output: "hi world"
Run Code Online (Sandbox Code Playgroud)

捕获组replaceAll

String test2 = "invert:me";
System.out.println(test2.replaceAll("(.*):(.*)","$2:$1"))
//Output: "me:invert"
Run Code Online (Sandbox Code Playgroud)

NB

  • replaceAll()sed与全局/g修饰符一起用作替换操作。
  • replaceFirst()与上面的方法完全一样,没有全局修饰符(仅替换第一个匹配项)
  • replace()不同的。它接受任何正则表达式只包含文字串!


Ger*_*cso 5

也许您正在寻找这个库:

UNIX4J

它自 2013 年以来就不再积极开发,但在其他方面它符合您的需求。它允许你这样写:

cat test.txt | grep "Tuesday" | sed "s/kilogram/kg/g" | sort 
Run Code Online (Sandbox Code Playgroud)

进入这个:

Unix4j.cat("test.txt").grep("Tuesday").sed("s/kilogram/kg/g").sort();
Run Code Online (Sandbox Code Playgroud)