Я не совсем уверен относительно направления вопроса, но проблема может быть слишком сложной для регулярных выражений, не говоря уже о шаблонах Lua. А так как мне нравятся грамматики - вот немного LPeg :
local l = require "lpeg";
local V, P, R, S = l.V, l.P, l.R, l.S;
local OUT = function(T, ... ) return function(...) print(T, ...) end end
local g = P{ "S",
S = 'Also there is ' * V'List' * '.',
List = V'Item' * (P',' * ' ' * V'Item')^0,
Item = V'Specific_Noun' + V'Name',
Name = V'Word' /OUT'Name',
Specific_Noun = (P'a' + 'an') * ' ' * (V'Word' * ' ')^0 * V'Noun',
Noun = V'Word' /OUT'Noun',
Word = R('az','AZ')^1,
}
g:match("Also there is a reinforced stone wall, a wooden wall, a stone wall, "..
"randomperson, a lumbering earth elemental, randomperson, randomperson, rando"..
"mperson, Karl, Greta, a mile.")
Пример вывода:
Noun wall
Noun wall
Noun wall
Name randomperson
Noun elemental
Name randomperson
Name randomperson
Name randomperson
Name Karl
Name Greta
Noun mile
Эта грамматика, очевидно, может анализировать только очень упрощенные списки, но она будет соответствовать вашим основным требованиям и может быть довольно легко расширена.