Я пытаюсь применить регулярное выражение на некотором некорректном тексте. Общий формат:группы захвата regex в некорректном тексте
descriptor (one|two|three|four) code
Идеальный вход Пример:
hello world (one) 0039x
И я хочу, чтобы захватить 3 группы:
"hello world", "one", "0039x"
(замечаешь отсутствующего скобка в группа (2))
Искаженные примеры:
hello (world) (two) 0039x
hello (world) three 0039x
hello world, four 0039x
hello (world)*,four 0039x
descriptor
должны сохраняющие любые скобки и символы (но запятые игнорируются), т.е. "hello (world)*"
также является допустимым.
Вот что я придумал:
([a-z0-9 \*\(\)]*),?\s?\(?(one|two|three|four)\)?\s([a-z0-9]+)
Он работает нормально, но проблема заключается в descriptor
стремится к жадности захватить открывающую скобку. т.е. от идеального примера:
"hello world (", "one", "0039x"
Что лучше регулярное выражение, которое будет работать с нормальным случаем и также деформированные случаи? Вероятно, это полезно, но я не уверен, как использовать (?:...)
и фиксировать любую скобку, если она также входит в состав descriptor
.