2015-09-25 2 views
0

Я использовал Regex строку:Почему Regex.IsMatch несрабатывания возвратного

versionPattern = @"^\d+(.\d+){3}$" 

проверить формат строки с 4 числа имеют дефис .

xxx.xxx.xxx.xxx or x.x.x.x ... 

Но это возвращает истину шпагатом:

1.0.0.123 

и возвращать ложную строку:

1.0.0.4 

Мой код для этого:

if (Regex.IsMatch(svnShopLoorTable.Rows[i].ItemArray[2].ToString(), versionPattern)) 
{ 
    //MessageBox.Show("OK"); 
} 
else 
{ 
    //MessageBox.Show("Should be: x.x.x.x"); 
    s += "\r\nProgram " + svnShopLoorTable.Rows[i].ItemArray[1].ToString() + " of SHOPFLOOR has wrong version format: " 
         + svnShopLoorTable.Rows[i].ItemArray[2].ToString() + " should be formated as: " + "x.x.x.x"; 
    Console.WriteLine(s); 
} 

Когда svnShopLoorTable.Rows[i].ItemArray[1].ToString() является 1.0.0.123 это нормально, а не выводились s. Но когда svnShopLoorTable.Rows[i].ItemArray[1].ToString() является 1.0.0.4, это отображение журнала в консоли:

Программа SetupSheet из цеховой имеет неправильный формат версии: 1.0.0.4 должен быть отформатированный как: хххх

Я не знаю, почему это проблема возникает. Пожалуйста, помогите мне объяснить и решить эту проблему. Цените любую помощь!

+1

не может воспроизвести https://regex101.com/r/nC0wV7/1, возможно, попробуйте добавить 'M' модификатор' @ "(? М) регулярное выражение" ' –

+2

возвращает ** ** верно для обоих случаев, хотя я бы избежал буквального '.'как для хорошей практики, так и для проверки фактической точки (иначе это означает любой символ, кроме новой строки). – hwnd

+0

@AvinashRaj: Я следую за форматом Regex из [MDSN] (https://msdn.microsoft.com/en-us/library/sdx2bds0 (v = vs.110) .aspx) –

ответ

1

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

Ваше регулярное выражение действительно, когда эта строка содержит это и только тот шаблон.

Убедитесь, что у вас нет каких-либо пробелов до или после «1.0.0.4», или изменить регулярное выражение, чтобы быть менее строгим:

versionPattern = @"\d+(.\d+){3}" 

Или обрабатывать пробельные:

versionPattern = @"^\s*\d+(.\d+){3}\s*$" 

Также вы должны поместить обратную косую черту («\») перед точкой («.»), Поскольку точка соответствует любому символу в регулярном выражении.

Значение этого:

^\d+(.\d+){3}$ 

также соответствует ли это:

1a2b3c4 

Но это не так:

^\d+(\.\d+){3}$ 

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

Редактировать: Теперь, когда я вижу ваш код, я понимаю, что вы также можете просто уйти с помощью Trim, предполагая, что я не ошибаюсь.

svnShopLoorTable.Rows[i].ItemArray[1].ToString().Trim() 
+0

Большое вам спасибо, брат. Ты спас свой день. Проблема решена! –

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