2016-05-11 2 views
2

Я попытался сделать регулярное выражение с помощью онлайн-инструмента, но не удалось. Вот строка, мне нужно, чтобы соответствовать: -Как совместить строку, содержащую^в регулярном выражении?

27R4FF^27R4FF текст до конца

  • всегда начинается с буквенно-цифровой (без учета регистра)
  • то всегда каретка знак^(без пробела перед тем & после)
  • затем алфавитно-цифровая строка
  • затем всегда один белый пространства
  • , затем строка до конца.

Вот регулярное выражение, которое не работает для меня: -

((?:[a-z][a-z]*[0-9]+[a-z0-9]*))(\^)((?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?((?:[a-z][a-z]+)) 

C# код: -

string txt = "784SFS^784SFS Value is here"; 

var regs = @"((?:[a-z][a-z]*[0-9]+[a-z0-9]*))(\^)((?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?((?:[a-z][a-z]+))"; 
Regex r = new Regex(regs, RegexOptions.IgnoreCase | RegexOptions.Singleline); 
Match m = r.Match(txt); 
Console.Write(m.Success ? "matched" : "didn't match"); 
Console.ReadLine(); 

Помощь оценена. Благодаря

+0

Не так ли? Вы получили сообщение об ошибке? Работает '. * \ ^. *', Поскольку вы, кажется, думаете, что это из-за '^'? – GolezTrol

+0

не соответствует ... – user1327064

+0

Требуется ли быть буквенно-цифровым? Или это может быть строка из шести слов? –

ответ

1

дословное ^[^\W_]+\^[^\W_]+[ ].*$

^   # BOS 
[^\W_]+  # Alphanum 
\^    # Caret 
[^\W_]+  # Alphanum 
[ ]   # Space 
.*    # Anything 
$    # EOS 

Выход

** Grp 0 - (pos 0 , len 28) 
27R4FF^27R4FF Text until end 
+0

Я не уверен в '[^ \ W_]'. Он содержит двойное отрицание: «символ совпадения, который не является символом без слов». Я думаю, что это сложный способ написать '\ w' (строчный).Но мне нравится весь разрыв регулярного выражения. Это, как правило, очень информативно для начинающих. Подробнее [информация о классах символов может быть найдена в MSDN] (https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396). – GolezTrol

+0

@GolezTrol - В чем проблема с двойным отрицанием? '[^ \ W_]' _is точно_ '[a-zA-Z0-9]'. Если это слишком много, то граница пробела убьет вас '(? sln

+0

Это тоже обычная версия '[^ \ S \ r \ n]' говорит, что соответствует горизонтальному пробелу. Привыкните к этому, это инструменты, используемые в регулярном выражении, которые вы должны знать, как использовать. – sln

1

я не получил, если строка 'до конца', должны быть согласованы.

Это работает для

27R4FF^27R4FF Text 

^\w+\^\w+\s\w+$ 

, если у вас есть какие-то пробелы в конце, попробуйте с

^\w+\^\w+\s[\w\s]+$ 
+1

\ w будет соответствовать символу подчеркивания, поэтому это не будет строго соответствовать шаблону, указанному в OP. – Colin

1

Попробуйте это: https://regex101.com/r/hD0hV0/2

^[\da-z]+\^[\da-z]+\s.*$ 

... или комментировал (предполагается, RegexOptions.IgnorePatternWhitespace, если вы используете формат в коде):

Другие ответы на самом деле не соответствуют тому, что вы описали (на момент написания этой статьи), потому что \ w соответствует подчеркиванию, и вы не указали никаких ограничений на «строку в конце».

+1

Так верно. Алфавитно-цифровое - это четкое описание, и имеет смысл, чтобы такой код был строго буквенно-цифровым. – GolezTrol

+0

@MichaelMcGriff - Нет, если он использует RegexOptions.IgnoreCase (который он в своем примере кода). – Colin

+0

Ах, пропустил это в самом C#! –

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