2015-03-05 3 views
0

У меня есть приложение, которое считывает коды из текстового файла, написанного на C#.Как обрабатывать новые строки в регулярных выражениях

Коды обычно следуют той же схеме, каждый раз, когда

пример:

QUES10100

Из того, что я написал до сих пор это приводит к регулярным выражением глядя, как это:

string expr = "^[A-Z]{4}[0-9]{5}$"; 

Вопрос в том, когда коды считываются из текстового файла (по одной на новую строку), коды имеют добавленный новый символ линии . Это от размещения точки останова, чтобы увидеть, что действительно проходит.

Что мне не хватает в приведенном выше выражении?

Также, если я добавляю коды отдельно, символы/r не добавляются так, чтобы это было хорошо, в этом случае мне понадобился бы или операнд где-то там.

Резюме

То, что я до сих пор: ^[A-Z]{4}[0-9]{5}$

Что мне нужно: ^[A-Z]{4}[0-9]{5}$ИЛИ^[A-Z]{4}[0-9]{5}$ с г символов/приходилось.


Спасибо, любые разъяснения, пожалуйста, дайте мне знать, как мой опыт работы с REGEX очень ограничено.


Update

string expr = "^[A-Z]{4}[0-9]{5}"; 

Regex regex = new Regex(expr , RegexOptions.IgnoreCase); 
Match match = regex.Match(code); 

if (!match.Success) //Pattern must match 
{ 
    MessageBox.Show("Code does not match the necessary pattern"); 
    return false; 
} 

return true; 
+0

Почему бы не использовать C# string.Split метод, и вы можете разделить на несколько разделителей.просто любопытно также вам нужно проверить не только '\ r но \ n также' – MethodMan

+1

@MethodMan Я не знал, что могу сделать это в C# Мне нужно, чтобы Google это работало. Среднее время предоставленного выражения составляет около 50% от предполагаемой работы. –

ответ

1

Если вы не имеете никакого контроля над тем, как эти строки читают, вы также можете взглянуть на метод String.Trim(char\[\] values), который позволит вам дезинфицировать вашу строку перед рукой:

что-то вроде ниже :

string str = "....".Trim(new char[] {'\r', '\n'}); 

Обычно это рекомендуется (поскольку почти все лучше, чем регулярное выражение :)).

Затем вы будете кормить его обычным выражением, которое вы создали.

+0

Что здесь происходит в коде? он просто удаляет значения «\ r» и «\ n» из строки? –

+0

@KyleT: он удаляет их * в том и только в том случае, если * они находятся в начале ** и ** в конце строки. Если вы хотите удалить только с фронта, вы можете взглянуть на 'String.TrimStart()' – npinti

+0

Ответ принят, потому что он обеспечивает возможность тестирования с использованием текстового файла с/r, добавленного к строке или кодовой строке без. –

2

Почему вы хотите использовать регулярные выражения для этого? Используйте File.ReadLines и используйте регулярное выражение для проверки.

foreach(string line in File.ReadLines(@"c:\file path here")) { 
    if (Regex.Test(expr, line)) { 
     Console.WriteLine(line); 
    } 
} 
+0

Обновление вопроса, для справки Я использовал объекты Regex и Match, чтобы решить часть вопроса. –

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