Это выражение может помочь вам сделать это, однако, возможно, нет необходимости выполнять эту задачу с регулярными выражениями. Если вы еще хотите / должны сделать это:
(")([A-z0-9\s]+)([,]?)(",)?
Я добавил границы, просто чтобы быть в безопасности. Вы можете значительно упростить это. Ключ должен добавить группу захвата до и одно после значений.
Например, одна из границ заключается в том, что в случае, если у вас случайно появятся лишние запятые, которые не являются значениями, он не будет фиксировать это
Graph
Этот график показывает, как будет работать выражение, и вы можете визуализировать другие выражения в этой ссылке :
Java Test
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "(\")([A-z0-9\\s]+)([,]?)(\",)?";
final String string = "\"D\",\"123123\",\"JAMMY,\",\" \",\"PILOT\"";
final String subst = "\\1\\2 \\4";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);
JavaScript Test Demo
const regex = /(")([A-z0-9\s]+)([,]?)(",)?/gm;
const str = `"D","123123","JAMMY,"," ","PILOT"`;
const subst = `$1$2 $4`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
Тест производительности
repeat = 1000000;
start = Date.now();
for (var i = repeat; i >= 0; i--) {
var string = '"D","123123","JAMMY,"," ","PILOT"';
var regex = /(")([A-z0-9\s]+)([,]?)(",)?/gm;
var match = string.replace(regex, "$1$2$4");
}
end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ??? ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ? ");