gpt4 book ai didi

java - 旧正则表达式代码的必要解释

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:13 24 4
gpt4 key购买 nike

几年前我偶然发现了自己编写的旧代码。但是,现在,我不知道它为什么有效。在我继续进行代码更改之前,我需要了解它的工作原理。

我有 CSV 格式的数据

"abc",123456789,"def"

有时,服务器会返回我

"abc",123,456,789,"def"

所以,我写了下面的代码来解决。

public class Sandbox {

private static final Pattern digitPattern = Pattern.compile("(\",)|,(?=[\\d,]+,\")");
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// "abc",123,456,789,"def"
String data = "\"abc\",123,456,789,\"def\"";

final String result = digitPattern.matcher(data).replaceAll("$1");

// "abc",123456789,"def"
System.out.println(result);
}
}

但是,当我回头看代码时,我不知道为什么 |,[\\d,]+ 可以帮助我删除逗号。 |, 匹配输入的哪一部分?

逐步解释如何非常感谢解析工作

最佳答案

你正在替换

(\",)|,(?=[\\d,]+,\")

$1

换句话说,您只在双引号后留下任何逗号(即 (\",),捕获到 $1),但删除后跟 1 个或多个数字和逗号、逗号和双引号的逗号(这是先行断言,(?=[\\d, ]+,\")).对于交替 (|),它是从左到右的优先级,所以如果前半部分匹配,逗号紧跟在双引号之后,就是这样,所以引擎继续前进,寻找下一个逗号。如果后半部分匹配,则不会捕获 $1,因此您实际上是在用空字符串替换匹配项(逗号)。

关于java - 旧正则表达式代码的必要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692125/

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