2013-08-01 4 views
0
String str = "USD SBFARE 4067.71 OVDPCT 8P SBMARKUP 0A TPS 59486 CC 0P OTH 0A" 

이 문자열에서 "8" (OVDPCT 8P)이 필요합니다.문자열에서 숫자를 찾는 방법

번호는 항상 OVDPCT을 따라 10, 12 등은 임의의 숫자를 의미 할 수있는 P.

이 8 앞에.

어떻게하면 C#을 사용할 수 있습니까?

+1

패턴이 무엇입니까? 번호는 항상'OVDPCT' 다음에'P'를 앞서는가? 아니면 항상 5 번째 줄입니까? 또한, 지금까지 어떤 솔루션을 시도 했습니까? – mart1n

+0

@ mart1n 예 항상 OVDPCT를 따르고 다음을 사용합니다. –

답변

2

몇 가지 변형이 있습니까? 항상 OVDPCT *P을의 경우

다음 패턴은 다음과 같습니다

Match match = Regex.Match(str,@".*OVDPCT (\d+)P.*"); 
int num = int.Parse(match.Groups[1].Value); 

참고 : 여기 매우 거친되고있어, 당신은 아마 싶어

.*OVDPCT (\d+)P.* 

당신은 다음과 같이 사용할 수 있습니다 match.Success을 확인하고 int.TryParse도 사용하십시오.

+0

사용 방법 ..? –

+0

OP가이 질문을하는 이유는 코드에 작은 버그가 있기 때문입니다. 그룹 대신 그룹 – varocarbas

+0

@varocarbas oops가 맞습니다. 결정된. 감사. – Lloyd

0

이것은 다음 작동한다 : D +의 \

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

정수 번호 정규식이다. 따라서

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

관련 문제