Регулярные выражения с десятичной частью
Мне нужна замена таких строк с помощью регулярных выражений: "SHS 80x3.5 | GOST 8639-82 | --" -> "PK80X3.5_32931_2015"
Пользуюсь таким выражением: SHS (\d*.?\d*)x(\d*.?\d*).*$ -> PK$1X$2_32931_2015
Но проблема в том, что если исходная строка такая: "SHS 80x3 | GOST 8639-82 | --" То выдает следующее: "PK80X3_32931_2015"
А мне нужно, чтобы десятичный знак (после точки) обязательно был, то есть:
"SHS 80x3 | GOST 8639-82 | --" -> "PK80X3.0_32931_2015"
"SHS 80x3.5 | GOST 8639-82 | --" -> "PK80X3.5_32931_2015"
Как мне это реализовать в регулярных выражениях? Использую регулярные выражения Microsoft https://learn.microsoft.com/ru-ru/dotnet/standard/base-types/regular-expression-language-quick-reference
Ответы (1 шт):
"SHS 80x3 | GOST 8639-82 | --" -> "PK80X3.0_32931_2015""SHS 80x3.5 | GOST 8639-82 | --" -> "PK80X3.5_32931_2015"
Поскольку автор не указал ЯП реализации - предложу решение на JS.
//"SHS 80x3 | GOST 8639-82 | --" -> "PK80X3.0_32931_2015"
//"SHS 80x3.5 | GOST 8639-82 | --" -> "PK80X3.5_32931_2015"
const a = [
"SHS 80x3 | GOST 8639-82 | --",
"SHS 80x3.5 | GOST 8639-82 | --"
]
const r = /SHS 80x(\d+)(\.\d+)?.+--/i
console.log(a.map(v => v.replace(r, (...a) =>
`PK80X${a[1]}${a[2] ?? '.0'}_32931_2015`
)))