Подтвердить что ты не робот

Как совместить начало или конец строки с использованием С# Regex?

Я пытаюсь сопоставить это выражение:

^COMA1TA2000,.*$

с этим текстом:

# Qualquer linha iniciada por # será ignorada
# Caracteres que não podem serem usados na nomenclatura das copiadoras ou modelos.
# & < > " '
COMA1TA2000,ta-2000,hd,COMB1
#COMA2TA2000,ta-2000,hd,COMB2
#COMA3TA2000,ta-2000,hd,COMB3

Я могу сделать это с помощью Notepad ++, но я не могу с С# Regex.

content = sr.ReadToEnd();
string pattern =  "^COMA1TA2000,.*$";
if(Regex.IsMatch(content, pattern))
System.Windows.Forms.MessageBox.Show("Test");

Что мне не хватает?

4b9b3361

Ответ 1

Вы можете использовать RegexOptions.Multiline, например:

Regex.IsMatch(content, pattern, RegexOptions.Multiline)

Документы: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx

Если RegexOptions.Multiline не установлен, ^ и $ будут соответствовать началу и концу строки, а не строке, как предполагалось.

Ответ 2

Или установите многострочный параметр в regex (?m): (?m)^COMA1TA2000,.*$

Ответ 3

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

То, что вы сейчас делаете, читает весь текст как блок текста, а опция MultiLine иногда разрушает вещи (так как в разных операционных системах есть разные символы CRLF и т.д.).

Мое предложение следующее:

string[] lines = File.ReadAllLines("path to your text file");
Regex regex = new Regex("^pattern$");
foreach (string line in lines)
{
    Match match = regex.Match(line.Trim())
    if (match.Successful)
    {
         // have your match here.
    }
}