【发布时间】:2021-11-23 05:15:48
【问题描述】:
我有一个包含此文本的字符串...
1. G66I11.J270.P5.C90.(+K2H1+)
2. G66I11.J90.P-5.(+K2H1+)
3. G66I215.4J270.P-55.Q-6.T2531(+K2H1+)
...
我需要提取字符“P”为5或55之后的值。
现在我使用 IndexOf 来获取:
int indexP = 0;
int number;
if (lines.Contains("P-"))
{
indexP = lines.IndexOf("P-") + 1;
}
else if (lines.Contains("P") && !lines.Contains("P-"))
{
indexP = lines.IndexOf("P");
}
if (lines.Contains("Q"))
{
int indexQ = 0;
if (lines.Contains(".Q"))
{
indexQ = lines.IndexOf(".Q");
}
if (indexQ > indexP)
{
number = Int.Parse(lines.Substring(indexP + 1, indexQ - indexP - 1));
}
}
if (lines.Contains("C"))
{
int indexC = 0;
if (lines.Contains(".C"))
{
indexC = lines.IndexOf(".C");
}
if (indexC > indexP)
{
number = Int.Parse(lines.Substring(indexP + 1, indexC- indexP - 1));
}
}
...
我完全返回,但“P”之后的字符可以是任何字符。
所以如果这样做的话,代码会很长:(
我想找到一条更短的路。你能告诉我怎么做吗? 谢谢。
【问题讨论】:
-
您的示例中的预期结果是什么? 5、-5、-55?还是 5、5、55?可以有没有“P”的字符串吗?还是有多个“P”?还是“P”后面不跟数字?
-
@KlausGütter 的预期结果是 5、5、55。总是有“P”,在“P”之后总是有数字。不能有没有“P”的字符串或不能有多个“P”的字符串
-
这不是对构成有效文本或无效文本的完整描述。我认为您的描述不足以告诉我如何验证任意字符串。我可以做出各种假设。看起来有由
.字符分隔的字段,例如 text.Split('.') 可能是一个好的开始。然后你可能想找到 StartsWithP的子字符串。看起来.P-5.应该提取-5而.P5.应该提取5。但我只是猜测。你应该在你的问题中澄清所有这些细节。P3.14是否应该返回3.14? -
lines应该是一个字符串数组还是包含换行符的单个字符串?我们应该先用换行符分割吗? -
抱歉没有具体说明。这是一个单独的行,而不是数组