0
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#.?

4

5 回答 5

2

我们在谈论多少种不同的变体?

如果总是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.

于 2013-08-01T11:35:21.857 回答
2

所以你可以使用正则表达式来做到这一点

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;
}

但是这条线看起来像一个数据库记录,不是吗?

于 2013-08-01T11:36:39.763 回答
0

这应该可以工作:

.*?OVDPCT (\d+)P.*
于 2013-08-01T11:36:01.530 回答
0

\d+ 是整数的正则表达式。所以

resultString = Regex.Match(subjectString, @"\d+").Value;

会给你那个数字作为一个字符串。Int32.Parse(resultString) 然后会给你号码。

于 2013-08-01T11:36:35.490 回答
0

请原谅杂乱无章的代码,但像这样:

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);
于 2013-08-01T11:49:56.153 回答