Регулярное выражение со строкой, разделенной запятой, разделенной знаком канала в .NET

#.net #regex

#.net #регулярное выражение

Вопрос:

Я пытаюсь получить регулярное выражение для следующего формата ниже. Для этого требуется «Имя», любой символ, кроме пустого пробела или ничего. Всегда знак канала, затем список элементов, разделенных запятыми, которые могут быть любыми символами. Хотя после запятой не может быть пробела (, ) .

 Name|Item1,Item2,Item3
  

Ниже приведено то, что у меня есть до сих пор, и его соответствие в основном каждый раз.

 (.*)|([.*] (,[S] )*) 
  

Недействительные

 Name|
Name
   |Item1,Item2
|Item1,Item2
Name|Item1, Item2
|
  

Ответ №1:

Вы можете использовать

 ^[^|s] |[^,|s] (?:,[^,|s] )*$
  

Смотрите демонстрацию регулярных выражений

Подробные сведения

  • ^ — начало строки
  • [^|s] — один или несколько символов, отличных от | и пробелов
  • | | символ
  • [^,|s] — один или несколько символов, отличных от , , | и пробелов
  • (?:,[^,|s] )* — ноль или более повторений запятой, а затем один или несколько символов, отличных от , , | и пробел
  • $ — конец строки.

Комментарии:

1. @MikeFlynn Нет, тогда используйте ^[^|] |[^,|s] (?:,[^,|s] )*$

2. Может ли разделенный запятыми список содержать пробелы между запятыми? Только не в начале или в конце.

3. @MikeFlynn Да, ^[^|] |[^,|s] (?:s*,s*[^,|s] )*$

4. Это больше не соответствует, Name|test test,test , (whitespace)|test,test , Name|test, test

5. @MikeFlynn Я неверно истолковал ваше намерение. Я думаю, вам нужно ^[^|] |[^,|] (?:,[^,|] )*$