gpt4 book ai didi

java - 正则表达式将查找实例转换为单个\

转载 作者:行者123 更新时间:2023-12-02 00:52:40 25 4
gpt4 key购买 nike

我正在寻找用 \\n 替换 \n 但到目前为止我的正则表达式尝试不起作用(实际上它本身就是任何\,\n 只是发生这是我在数据中的用例)。

我需要的是以下内容:

any-non-\ followed by \ followed by any-non-\

最终我会将正则表达式传递给 java.lang.String.replaceAll,因此格式化的正则表达式会很棒,但我可能可以将另一种样式的正则表达式转换为我需要的内容。

例如我在这个程序之后打印出“true”...

public class Main
{
public static void main(String[] args)
{
final String original;
final String altered;
final String expected;

original = "hello\nworld";
expected = "hello\\nworld";
altered = original.replaceAll("([^\\\\])\\\\([^\\\\])", "$1\\\\$2");
System.out.println(altered.equals(expected));
}
}

使用这个确实有效:

    altered  = original.replaceAll("\\n", "\\\\n");

最佳答案

字符串应该是

"[^\\\\]\\\\[^\\\\]"

您必须在用于正则表达式的字符串常量中使用四个反斜杠;如果你只将它们加倍,它们将被字符串转义,但不会被正则表达式转义。

所以实际的代码是

myString = myString.replaceAll("([^\\\\])\\\\([^\\\\])", "$1\\\\$2");

请注意,在替换中,四重反斜杠现在被解释为两个反斜杠而不是一个,因为正则表达式引擎没有解析它。 编辑: 实际上,正则表达式引擎确实会解析它,因为它必须检查反向引用。

编辑: 上面假设输入字符串中有一个文字 \n,它在字符串文字中表示为 "\\n “。由于它显然有一个换行符(表示为 "\n"),因此正确的替换是

myString = myString.replaceAll("\\n", "\\\\n");

对于任何其他特殊字符(\t\r\0\\等)。 如上所述,替换字符串看起来与正则表达式字符串完全相同,但事实并非如此。

关于java - 正则表达式将查找实例转换为单个\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2373855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com