Для строки, содержащей символы и цифры, как добавить 1 только ко всем числам - PullRequest
0 голосов
/ 14 апреля 2019

Спасибо за помощь!У меня есть список строк из файла пути:

Data = "M311.97458,250.39993 L213.97533,248.39996 222.37435,216.7998 C222.37435,216.7998 ...... 589.5753,173.99994 593.1753,179.9999...... 334.3039,253.21373 311.97458,250.39993 z "(" ....... "используется для представления ненужного числа")

Как видите, символы (например, "M""и" C ") имеют какое-то особое значение, и пары чисел предназначены для согласования. Я хочу добавить 1 к каждому числу в" Данные ", не меняя никаких других вещей. Как я могу сделать это с C #? Я предполагаю .split()полезно, но «Данные» слишком сложны для .split() только

Спасибо!

1 Ответ

2 голосов
/ 14 апреля 2019

Вы можете использовать Regex, чтобы идентифицировать числа в строке и заменить их новым значением.Например;

var data = @"M311.97458,250.39993 L213.97533,248.39996 222.37435,216.7998 C222.37435,216.7998 ......589.5753,173.99994,593.1753,179.9999......334.3039,253.21373 311.97458,250.39993 z";            
var replaced = Regex.Replace(data, "((?=[^, ])\\d+\\.\\d+)", (match) => (double.Parse(match.Value) + 1).ToString());
// output: M312.97458,251.39993 L214.97533,249.39996 223.37435,217.7998 C223.37435,217.7998 ......590.5753,174.99994,594.1753,180.9999......335.3039,254.21373 312.97458,251.39993 z

Так что здесь шаблон Regex идентифицирует числа в строке, находя все, что не является запятой или пробелом и является числовым с десятичным знаком в (так что это не будет работатьдля целых чисел, но вы можете адаптировать, если требуется).Затем, эффективно в Regex.Replace мы перебираем каждое совпадение и используем MatchEvaluator , чтобы добавить единицу к числу и вернуть ее для формирования новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...