Захватив строку в определенном формате


У меня есть требование, чтобы захватить строку в определенном формате * [цифр] *. Это, как я сделал прямо сейчас, но я думаю, что это будет быстрее с регулярными выражениями. У меня нет много опыта с регулярными выражениями, поэтому, пожалуйста, помогите мне оптимизировать этот код с помощью регулярных выражений.

if (string.IsNullOrEmpty(BarcodeScan) && e.KeyChar.ToString() == "*")
    BarcodeScan = e.KeyChar.ToString();
else
{
    if (BarcodeScan.StartsWith("*"))
    {
        if (int.TryParse(e.KeyChar.ToString(), out i))
            BarcodeScan += i.ToString();

        else if (e.KeyChar.ToString() == "*")
        {
            BarcodeScan += "*";
            ArticleID = BarcodeScan.Substring(1, BarcodeScan.Length - 2);
        }
        else            
            BarcodeScan = string.Empty;
     }
}

Приведенный выше код написан на событие keypress, так что я должен захватить строку, как пользователь выполняет вход. В основном первые * означает, что пользователь начал ввод статье ID и я продолжаю фиксации цифр, пока он не переходит в другой *.

Это означает, что

  • *2323 действителен, но неполное
  • *34ч является недействительным
  • *343f33 является недействительным
  • *3434hsds3 * является недействительным
  • *3412 * является действительным и полным

Как я могу проверить для *2323 в регулярное выражение? Я старалась ^\*\д+ , Но это позволяет *22ф , а также.



294
3
задан 18 декабря 2011 в 09:12 Источник Поделиться
Комментарии
1 ответ

Вы могли предоставить больше образцов ваших данных? В любом случае, попробовать это

Regex regex = new Regex(@"^[*]\d+[*]$");

Если вы действительно думаете, что в скобках (например, []), используя следующие:

Regex regex = new Regex(@"^[*][\[]\d+[]][*]$");

4
ответ дан 18 декабря 2011 в 10:12 Источник Поделиться