#arrays #json #regex #string #qregularexpression
#массивы #json #регулярное выражение #строка #qregularexpression
Вопрос:
Я новичок в этой области и пытаюсь написать однострочный шаблон регулярных выражений как часть создания шаблона json, который принимал бы шаблон «массива строк»:
["9H", "0000", "0000", "10123", "7809", "0000", "0000"]
До сих пор я находил регулярное выражение для отдельных элементов, скажем, "^[0-9][A-Z]$"
для первого элемента, "^[0-9]{4}$"
для второго элемента и так далее.
Но мне нужно указать шаблон строки, принимающий массив из 7 таких элементов, без какого-либо изменения количества целых чисел / символов в каждом элементе. (т. Е. "10123"
может быть "12345"
, но не должно быть "123456"
.
Комментарии:
1. Что для вас означает «принятие массива из 7 таких элементов»?
2. Если вы просто хотите проанализировать и получить
string[]
тогда вам следует использоватьNewtonsoft.Json
и просто сделать это:string[] output = (JsonConvert.DeserializeObject(source) as JArray).Select(t => t.Value<string>()).ToArray();
.3. Серьезно, что означает «однострочный шаблон регулярного выражения как часть создания шаблона json, который будет принимать шаблон «массива строк»»?
Ответ №1:
Регулярные выражения работают со строками, так что это означает, что у вас есть два варианта:
- Преобразуйте весь ваш массив в одну большую строку (например
arr.join('|')
), чтобы вы могли написать 1 большое регулярное выражение для его тестирования. - Не делайте этого. Просто вручную выпишите код для первого элемента и выполните цикл для остальных элементов и используйте соответствующее регулярное выражение для каждой части.
# 2 имеет для меня гораздо больше смысла. Может быть немного больше кода, но этот код будет более разборчивым.
Комментарии:
1. Я прочитал вопрос так, как есть у OP
string source = @"[""9H"", ""0000"", ""0000"", ""10123"", ""7809"", ""0000"", ""0000""]";
, и они хотят разобрать его наstring[]
.2. Это делается как часть создания шаблона JSON. Я ищу шаблон с одной строкой, который принимал бы этот массив строк. например, если бы массив был [«0000»], мой шаблон был бы «^[0-9]{4}$»
3. @lakshmisubhash — Не могли бы вы, пожалуйста, определить, что означает «принять этот массив строк»? Не могли бы вы показать в качестве допустимого кода C #, с какими входными данными вы работаете, а затем, какими вы ожидаете получить результат?
4. Я не пишу фрагмент кода C #. Позвольте мне объяснить, что я делаю — я должен указать шаблон для шаблона. Позже, когда я предоставляю входные данные для этого шаблона, я проверяю, совпадает ли шаблон ввода с шаблоном, указанным в шаблоне. Если да, он принимает входные данные, и мы их обрабатываем. Например, если шаблон должен принимать только целые числа, я бы указал шаблон как «^ [0-9] $». Здесь я ищу такой однострочный шаблон, который принимал бы этот массив строк.