Выражение в этом ответе намного лучше, поскольку, например, оно не захватывает +
.
Сказав это, я думаю, что ваше разработанное выражение также просто прекрасно, может быть, мы немного изменим это:
[-+]?\d+\.\d+|[-+]?\d+
и это, вероятно, сработает, поскольку проверка не требуется.
Тест
import re
matches = re.finditer(r"[-+]?\d+\.\d+|[-+]?\d+", "-0.2x-0.73y-0.11z-0.2x-0.73y-0.11")
linear_eq_coeff=[]
for match in matches:
linear_eq_coeff.append(match.group())
print linear_eq_coeff
выход
['-0.2', '-0.73', '-0.11', '-0.2', '-0.73', '-0.11']
Демо
const regex = /[-+]?\d+\.\d+|[-+]?\d+/gm;
const str = `-0.2x-0.73y-0.11z-0.2x-0.73y-0.11`;
let m;
arr = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
arr.push(match);
});
}
console.log(arr);
Рекомендации
wjandrea Совет таков:
Можно упростить до [-+]?(\d*\.)?\d+