2013-08-01 2 views
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#.?

+1

Что картина? Всегда ли этот номер следует за «OVDPCT» и предшествует «P»? Или это всегда пятая строка? Кроме того, какие решения вы пробовали до сих пор? – mart1n

+0

@ mart1n да всегда следует за ОВПЧТ и предшествует p –

ответ

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.

+0

как использовать это ..? –

+0

Я думаю, что причина, по которой ОП задает этот вопрос, состоит в том, что в вашем коде есть небольшая ошибка: группа вместо групп – varocarbas

+0

@varocarbas, если вы правы. Исправлена. Благодарю. – Lloyd

0

Это должно работать тогда:

.*?OVDPCT (\d+)P.* 
0

\ D + является регулярным выражением для целого числа. Таким образом,

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

предоставит вам этот номер в виде строки. Затем Int32.Parse (resultString) даст вам номер.

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

Но эта линия кажется как база данных записи, не так ли?

+0

Ваш шаблон, похоже, нуждается в заголовке «@». – varocarbas

+0

Благодарим вас за советы –

+0

или «\\», если вы предпочитаете :) – varocarbas

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); 
+0

Почему бы просто не использовать регулярное выражение на целом, а не только последнюю часть, чтобы проверить число? Кажется немного неэффективным. – Lloyd

+0

Потому что есть другие числа, которые не интересовали OP - по крайней мере, так я читал его – MarkG

+0

... хотя я теперь видел исправленный OP, и я согласен, что это неэффективно, учитывая, что входная строка больше последовательный, чем первоначально описано! – MarkG

Смежные вопросы