String str = "USD SBFARE 4067.71 OVDPCT 8P SBMARKUP 0A TPS 59486 CC 0P OTH 0A"
我需要"8" (OVDPCT 8P)
这个字符串。
数字始终跟在 OVDPCT 之后并以 P 开头。
这 8 可能是 10,12 等表示任何数字。
我如何使用 c#.?
我们在谈论多少种不同的变体?
如果总是OVDPCT *P
这样,那么模式可以是:
.*OVDPCT (\d+)P.*
你可以像这样使用它:
Match match = Regex.Match(str,@".*OVDPCT (\d+)P.*");
int num = int.Parse(match.Groups[1].Value);
注意:我在这里非常粗略,您可能想要检查match.Success
并使用int.TryParse
.
所以你可以使用正则表达式来做到这一点
var match = System.Text.RegularExpressions.Regex.Match(str, "OVDPCT (?<Number>\\d+)P", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if(match.Success)
{
var number = match.Groups["Number"].Value;
}
但是这条线看起来像一个数据库记录,不是吗?
这应该可以工作:
.*?OVDPCT (\d+)P.*
\d+ 是整数的正则表达式。所以
resultString = Regex.Match(subjectString, @"\d+").Value;
会给你那个数字作为一个字符串。Int32.Parse(resultString) 然后会给你号码。
请原谅杂乱无章的代码,但像这样:
var str = "USD SBFARE 4067.71 OVDPCT 8P SBMARKUP 0A TPS 59486 CC 0P OTH 0A";
var strAsArray = str.Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries);
var subject = strAsArray[4].Trim(); // assuming fifth element
var value = new Regex("^[0-9]+").Match(subject).Value;
Console.WriteLine("Found: ", value);