я бы, вероятно, использовать регулярное выражение как это:
\((\d+(?:\s*,\s*\d+)*)\)
с PowerShell кода:
$str = @(
"(1, 2,3)"
, "(1,3,4,5,77)"
, "(b(2,46,8,4,5, 52)"
, "(a (3, 8,2, 1, 2, 9) x)"
, "(1)"
, "(1 2, 3)" # no match (no comma between 1st and 2nd number)
, "(1,2,3)" # no match (leading whitespace before 1st number)
, "(1,2,3)" # no match (trailing whitespace after last number)
, "(1,2,)" # no match (trailing comma)
)
$re = '\((\d+(?:\s*,\s*\d+)*)\)'
$str | ? { $_ -match $re } | % { $matches[1] -replace '\s+', "" }
регулярное выражение будет соответствовать (суб) строку, начинается с открывающей круглой скобки, за которой следует разделенная запятыми последовательность чисел (которая может содержать любое количество пробелов до запятой или после нее) и заканчивается закрывающей скобкой. Затем пробел удаляется инструкцией -replace
.
Если вы не хотите, чтобы соответствовать одиночные номера ("(1)"
), изменить регулярное выражение следующим образом:
\((\d+(?:\s*,\s*\d+)+)\)
Если вы хотите разрешить пробелы после открытия или перед закрывающей скобкой, изменить регулярное выражают следующее:
\(\s*(\d+(?:\s*,\s*\d+)*)\s*\)
a) Какие части этого являются переменными? б) Что вы пробовали? –
Эта переменная имеет такие числа: (число, число, ..., число) в скобках могут быть с пробелами. Я использовал простой метод разделения, но это не изящно и подвержено ошибкам. – Nmktronas