查找括号之间的所有字符

时间:2014-06-24 16:52:57

标签: c# regex

我有一份共同基金清单,我需要从中提取股票代码。列表是这样的:

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个字符。然后我要写一个新文件,但是现在我似乎无法返回自动收报机(parens之间的字符)。我应该得到:

FSTCX
FSUTX
FSRVX
FLILX
FMJDX
FAMRX

相反,它返回整行。这就是我所拥有的(在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();
    }
}

4 个答案:

答案 0 :(得分: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 :(得分:2)

Regex + Linq

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

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

答案 2 :(得分:1)

你的正则表达式是,

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

DEMO

并且不要忘记打印匹配的组1。

答案 3 :(得分:1)

尝试以下正则表达式并获得匹配组。

\((\w+)\)

DEMO

程序中使用的字符串文字:c#

@"\((\w+)\)"