#c# #regex
#c# #регулярное выражение
Вопрос:
У меня есть список взаимных фондов, из которых мне нужно извлечь символы тикера. Список выглядит следующим образом:
FID SEL TELECOMM (FSTCX)29.07.1985 УТИЛИТЫ FID SEL (FSUTX)12/10/1981 SPTN REAL ES IDX ADV (FSRVX)08.09.2011 SA НОВЫЕ MKTS FOF (FLILX)02.05.2012 SA INTL MULTI MGR (FMJDX)02.05.2012 FID ASSET MGR 85% (FAMRX)24.09.1999
Мне нужно извлечь 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();
}
}
Комментарии:
1. Уверен, вам нужно посмотреть
match.Groups[1]
на ваше содержимое.2. Вау, вот и все. Однако он также возвращает скобки. Разве [A-Z] не должен извлекать только символы?
Ответ №1:
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:MyDocumentsTickerList.txt")) {
Match match = pattern.Match(line);
if (match.Success) {
Console.WriteLine(match.Groups[1].Value);
Console.ReadLine();
}
}
Или, может быть…
File.ReadLines(@"C:MyDocumentsTickerList.txt")
.Select(pattern.Match)
.Where(m => m.Success)
.Select(m => m.Groups[1].Value)
(возможно)
Ответ №2:
Регулярное выражение Linq
string input = File.ReadAllText("C:\MyDocuments\TickerList.txt");
var values = Regex.Matches(input, @"((. ?))").Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();
Ответ №3:
Ваше регулярное выражение будет,
Regex pattern = new Regex(@"(([^)]*))");
И не забудьте распечатать соответствующую группу 1.
Ответ №4:
Попробуйте использовать приведенное ниже регулярное выражение и получите соответствующую группу.
((w ))
Строковые литералы для использования в программах: @"((w ))"
для c#