Определяйте необязательный текст группы между круглыми скобками, но исключайте скобки в результате - PullRequest
1 голос
/ 28 сентября 2019

Для приложения, которое в какой-то момент интерпретирует текст определения данных, я хочу использовать регулярное выражение.Регулярное выражение должно разбивать определение данных на 4 группы для каждой строки.

Проблема в том, что есть группа между круглыми скобками, но это также необязательно И оно должно исключать круглые скобки из результата.Я пробовал кое-что, но не могу заставить его работать.

Это то, что я получил до сих пор

\[(.*?)\]\s.*(varchar|datetime|int|numeric)(\(.*?\))?(.*)

# explanation
\[(.*?)\]                       # field name between brackets
\s.*                            # one or more spaces
(varchar|datetime|int|numeric)  # data type keywords
(\(.*?\))?                      # length or mask, ?=optional
(.*)                            # anything after that are the hints

Например, введите это

[LastName] varchar(50) NULL
[BirthDate] datetime(dd-mm-yyyy) NOT NULL
[HBa] numeric NOT NULL
[email] varchar(50) NOT NULL
[Followup] int NULL

Для каждой строки есть соответствие, например, результаты для BirthDate выглядят так:

# current                   # desired
group 1: BirthDate          group 1: BirthDate
group 2: datetime           group 2: datetime
group 3: (dd-mm-yyyy)       group 3: dd-mm-yyyy
group 4:  NOT NULL          group 4: NOT NULL

В идеале группа 3 должна исключать скобки, а также группа 4 не должна включатьпробелы в начале.есть идеи как это сделать?Смотрите пример здесь: https://regex101.com/r/x60Ekg/1

1 Ответ

1 голос
/ 28 сентября 2019
\[(.*?)\]\s.*(varchar|datetime|int|numeric)(?:\((.*?)\))?\s*(.*)

должен сделать свое дело.Единственными изменениями, которые я сделал, было

  1. , добавив группу без захвата и инвертировав буквальную скобку и группу захвата для совпадения (50).
  2. , добавив \s*, чтобы использовать пробелы между(50) группа и остальные строки (NOT NULL группа).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...