对于包含字符和数字的字符串,如何仅对所有数字加1

时间:2019-04-14 12:45:05

标签: c# path

感谢您的帮助! 我有一个来自路径文件的字符串列表:

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 个答案:

答案 0 :(得分:2)

您可以使用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在数字上加一个,然后将其返回以形成新字符串。