2014-06-24 3 views
0

나는 뮤추얼 펀드의 목록을 가지고 있는데, 나는 시세 기호를 꺼내야한다. 목록은 다음과 같습니다.괄호 사이의 모든 문자 찾기

 
FID SEL TELECOMM (FSTCX)07/29/1985 
FID SEL UTILITIES (FSUTX)12/10/1981 
SPTN REAL ES IDX ADV (FSRVX)09/08/2011 
SA EMERGING MKTS FOF (FLILX)05/02/2012 
SA INTL MULTI MGR (FMJDX)05/02/2012 
FID ASSET MGR 85% (FAMRX)09/24/1999 

parens()에있는 각 줄에서 5자를 가져와야합니다. 나는 새로운 파일에 글을 쓸 예정이지만, 지금은 표식 (괄호 사이의 문자) 만 반환 할 수는 없다. 내가해야한다 :

대신 전체 줄을 반환합니다. 여기에 내가 가지고있는 것이있다 (C#에서).

Regex pattern = new Regex(@"\(([A-Z]*)\)"); 

StreamReader reader = new StreamReader("C:\\MyDocuments\\TickerList.txt"); 

string line; 

while ((line = reader.ReadLine()) != null)     
{ 
    Match match = pattern.Match(line); 

    if (match.Success) 
    { 
     Console.WriteLine(line); 
     Console.ReadLine(); 
    } 
} 
+0

당신이 match.Groups'볼 필요가 확신 [1]' 귀하의 콘텐츠. – Gus

+0

Wowsers, 그게 다야. 그러나 그것은 또한 괄호를 돌려주고있다. [A-Z]가 문자 만 가져 가면 안됩니까? – BattlFrog

답변

2

Console.WriteLine(line);match을 포함하지 않습니다.

if (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
    Console.ReadLine(); 
}

그리고 당신은 너무 File.ReadLines, 사용할 수 있습니다

Regex pattern = new Regex(@"\(([A-Z]*)\)"); 

for (var line in File.ReadLines(@"C:\MyDocuments\TickerList.txt")) { 
    Match match = pattern.Match(line); 

    if (match.Success) { 
     Console.WriteLine(match.Groups[1].Value); 
     Console.ReadLine(); 
    } 
} 

아니면을 ...

File.ReadLines(@"C:\MyDocuments\TickerList.txt") 
    .Select(pattern.Match) 
    .Where(m => m.Success) 
    .Select(m => m.Groups[1].Value) 

(아마도)

귀하의 정규식이 될 것
1

,

Regex pattern = new Regex(@"\(([^\)]*)\)"); 
,

DEMO

과 일치하는 그룹에 정규식 아래 1.

1

시도를 인쇄하고 일치하는 그룹을 얻을 것을 잊지 마세요. 프로그램에 사용

\((\w+)\) 

DEMO

문자열 리터럴 : C#을위한 @"\((\w+)\)"

2

정규식 + Linq에

string input = File.ReadAllText("C:\\MyDocuments\\TickerList.txt"); 

var values = Regex.Matches(input, @"\((.+?)\)").Cast<Match>() 
       .Select(m => m.Groups[1].Value) 
       .ToList(); 
관련 문제