2014-01-30 3 views
1

Привет, все пробовали все строки pattrens и аргументы библиотеки, но все еще застряли.Lua: Поиск определенной строки

я хочу, чтобы получить имя директора от следующей строки Я попытался String.match, но она совпадает с первым символом он НАХОДИТСЯ из строки

строки является ...

fixstrdirector = {id: 39254, cast: [{id: 15250, имя: Hope Davis, персонаж: тетя Дебра, заказ: 5, cast_id: 10, profile_path: /aIHF11Ss8P0A8JUfiWf8OHPVhOs.jpg}, {id: 53650, имя: Anthony Mackie, персонаж: Finn, order: 3, cast_id: 11, profile_path: /5VGGJ0Co8SC94iiedWb2o3C36T.jpg}, {id: 19034, имя: Evangeline Lilly, персонаж: Bailey Tallet, заказ: 2, cast_id: 12, profile_path:/oAOpJKgKEdW49jXrjvUcPcEQJb3. jpg}, {id: 6968, имя: Хью Джекман, персонаж: Чарли Кентон, заказ: 0, cast_id: 13, profi le_path: /wnl7esRbP3paALKn4bCr0k8qaFu.jpg}, {id: 79072, имя: Kevin Durand, персонаж: Рики, заказ: 4, cast_id: 14, profile_path: /c95tTUjx5T0D0ROqTcINojpH6nB.jpg}, {id: 234479, имя: Дакота Гойо, персонаж: Max Kenton, order: 1, cast_id: 15, profile_path: /7PU6n4fhDuFwuwcYVyRNVEZE7ct.jpg}, {id: 8986, имя: James Rebhorn, персонаж: Марвин, заказ: 6, cast_id: 16, profile_path: /ezETMv0YM0Rg6YhKpu4vHuIY37D.jpg}, { id: 930729, имя: Marco Ruggeri, персонаж: Cliff, order: 7, cast_id: 17, profile_path: /1Ox63ukTd2yfOf1LVJOMXwmeQjO.jpg}, {id: 19860, имя: Karl Yune, персонаж: Tak Mashido, order: 8, cast_id: 18, profile_path: /qK315vPObCNdywdRN66971FtFez.jpg}, {id: 111206, имя: Olga Fonda, персонаж: Farra Lemkova, заказ: 9, cast_id: 19, profile_path: /j1qabOHf3Pf82f1lFpUmdF5XvSp.jpg}, {id: 53176, имя: John Gatins , персонаж: Kingpin, order: 10, cast_id: 41, profile_path: /A2MqnSKVzOuBf8MVfNyve2h2LxJ.jpg}, {id: 1126350, имя: Sophie Levy, персонаж: Big Sister, order: 11, cast_id: 42, profile_path: null}, { id: 1126351, имя: Тесс Леви, персонаж: Маленькая сестра, заказ: 12, cast_id: 43, profile_ путь: null}, {id: 1126352, имя: Charlie Levy, персонаж: Littlest Sister, заказ: 13, cast_id: 44, profile_path: null}, {id: 187983, имя: Gregory Sims, персонаж: Bill Panner, 14, cast_id: 45, profile_path: null}], команда: [{id: 58726, имя: Leslie Bohem, отдел: Написание, работа: Сценарий, profile_path: null}, {id: 53176, имя: John Gatins, отдел: Написание, работа: Сценарий, profile_path: /A2MqnSKVzOuBf8MVfNyve2h2LxJ.jpg}, {id: 17825, имя: Shawn Levy, отдел: Режиссер, работа: Director, profile_path: /7f2f8EXdlWsPYN0HPGcIlG21xU.jpg}, {id: 12415, имя: Richard Matheson, отдел: Написание, работа: Story, profile_path: null}, {id: 57113, имя: Dan Gilroy, отдел: Написание, работа: Story, profile_path: null}, {id: 25210, имя: Джереми Левен, отдел: job: Story, profile_path: null}, {id: 17825, имя: Shawn Levy, отдел: Производство, работа: Продюсер, profile_path: /7f2f8EXdlWsPYN0HPGcIlG21xU.jpg}, {id: 34970, имя: Сьюзан Монфорд, отдел: Производство, работа : Продюсер, profile_path: /1XJt51Y9ciPhkHrAYE0j6Jsmgji.jpg}, {id: 3183, имя: Don Murphy, отдел: Производство, работа: Pr oducer, profile_path: null}, {id: 34967, имя: Rick Benattar, отдел: Production, job: Producer, profile_path: null}, {id: 1126348, имя: Eric Hedayat, department: Production, job: Producer, profile_path: null}, {id: 186721, имя: Ron Ames, отдел: Производство, работа: Продюсер, profile_path: null}, {id: 10956, имя: Джош Маклаглен, отдел: Производство, работа: Исполнительный продюсер, profile_path: null}, {id: 57634, имя: Мэри МакЛаглен, отдел: Производство, работа: Исполнительный продюсер, profile_path: null}, {id: 23779, имя: Jack Rapke, отдел: Производство, работа: Исполнительный продюсер, profile_path: null}, {id : 488, имя: Стивен Спилберг, отдел: Производство, работа: Исполнительный продюсер, profile_path: /cuIYdFbEe89PHpoiOS9tmo84ED2.jpg}, {id: 30, имя: Стив Старки, отдел: Производство, работа: Исполнительный продюсер, profile_path: null}, { id: 24, имя: Robert Zemeckis, отдел: Производство, работа: Исполнительный продюсер, profile_path: /isCuZ9PWIOyXzdf3ihodXzjIumL.jpg}, {id: 531, имя: Danny Elfman, отдел: Звук, работа: Композитор оригинальной музыки, profile_path:/pWacZpYPos8io22nEiim7d3wp2j .jpg}, {я d: 18265, имя: Mauro Fiore, отдел: Crew, job: Cinematography, profile_path: null}, {id: 54271, имя: Дин Циммерман, отдел: Редактирование, задание: Редактор, profile_path: null}, {id: 25365, имя: Richard Hicks, отдел: Производство, работа: Casting, profile_path: null}, {id: 5490, имя: David Rubin, отдел: Производство, работа: Casting, profile_path: null}, {id: 52088, имя: Tom Meyer , отдел: Art, job: Production Design, profile_path: null}]}

Я пробовал string.match (fixstrdirector, "name :(.+), Отдел: Режиссура ")

, но это дает мне с первого occurace это найти имя до конца строки Чет

выход:

Hope Davis,character:Aunt Debra,order:5,cast_id:10,profile_path:/aIHF11Ss8P0A8JUfiWf8OHPVhOs.jpg},{id:53650,name:Anthony Mackie,character:Finn,order:3,cast_id:11,profile_path:/5VGGJ0Co8SC94iiedWb2o3C36T.jpg},{id:19034,name:Evangeline Lilly,character:Bailey Tallet,order:2,cast_id:12,profile_path:/oAOpJKgKEdW49jXrjvUcPcEQJb3.jpg},{id:6968,name:Hugh Jackman,character:Charlie Kenton,order:0,cast_id:13,profile_path:/wnl7esRbP3paALKn4bCr0k8qaFu.jpg},{id:79072,name:Kevin Durand,character:Ricky,order:4,cast_id:14,profile_path:/c95tTUjx5T0D0ROqTcINojpH6nB.jpg},{id:234479,name:Dakota Goyo,character:Max Kenton,order:1,cast_id:15,profile_path:/7PU6n4fhDuFwuwcYVyRNVEZE7ct.jpg},{id:8986,name:James Rebhorn,character:Marvin,order:6,cast_id:16,profile_path:/ezETMv0YM0Rg6YhKpu4vHuIY37D.jpg},{id:930729,name:Marco Ruggeri,character:Cliff,order:7,cast_id:17,profile_path:/1Ox63ukTd2yfOf1LVJOMXwmeQjO.jpg},{id:19860,name:Karl Yune,character:Tak Mashido,order:8,cast_id:18,profile_path:/qK315vPObCNdywdRN66971FtFez.jpg},{id:111206,name:Olga Fonda,character:Farra Lemkova,order:9,cast_id:19,profile_path:/j1qabOHf3Pf82f1lFpUmdF5XvSp.jpg},{id:53176,name:John Gatins,character:Kingpin,order:10,cast_id:41,profile_path:/A2MqnSKVzOuBf8MVfNyve2h2LxJ.jpg},{id:1126350,name:Sophie Levy,character:Big Sister,order:11,cast_id:42,profile_path:null},{id:1126351,name:Tess Levy,character:Little Sister,order:12,cast_id:43,profile_path:null},{id:1126352,name:Charlie Levy,character:Littlest Sister,order:13,cast_id:44,profile_path:null},{id:187983,name:Gregory Sims,character:Bill Panner,order:14,cast_id:45,profile_path:null}],crew:[{id:58726,name:Leslie Bohem,department:Writing,job:Screenplay,profile_path:null},{id:53176,name:John Gatins,department:Writing,job:Screenplay,profile_path:/A2MqnSKVzOuBf8MVfNyve2h2LxJ.jpg},{id:17825,name:Shawn Levy 
+1

Почему бы не использовать парсер json? –

+0

его не поддерживается на платформе, над которой я работаю. –

ответ

2

Вы ищете из первое появление «name:» до «отдела: Направление» со всем промежутком.

Вместо этого вам нужно ограничить то, что может быть между двумя строками. Вот, например, я говорю, что символы, которые составляют имя может быть только буквенно-цифровым или пробелом:

string.match(fixstrdirector,"name:([%w ]+),department:Directing") 

Кроме того, учитывая, что есть запятая разделяющей параметры, лучший подход будет искать «имя:», а затем остальные вместо запятой символов, а затем «отдел: режиссерский»:

string.match(fixstrdirector,"name:([^,]+),department:Directing") 

Конечно, это не сработает, если имя запяло!

+0

Спасибо, что помогли по-настоящему оценить это. Мне удалось получить несколько данных, но снова он застрял в одной строке, которая {id: 643, имя: Gong Li, персонаж: Anna Lan-Ting, order: 6, cast_id: 10, profile_path: /dgGWKMAP5vbgACkXTazZXt3JQoT.jpg}, { id: 1619, имя: Chow Yun-Fat, персонаж: Anthony Lan-Ting, заказ: 7, cast_id: 11, profile_path: /c9QcWUSfHjNrH5dQQobqCKfHzUj.jpg}], команда: [{id: 29605, имя: Mikael Håfström, отдел: Режиссер, работа: Режиссер, profile_path: /gt4zyyOH6Zxz1icHy8RvMqpNTx2.jpg}, {id: 56960, имя: Хоссейн Амини, отдел: Письмо, работа: Writer, profile_path: null}]} –

+0

Я знаю его, потому что был характерным персонажем в названии режиссера «Микаэль Хофстрем». –

+0

Используете ли вы второе решение, которое я вам дал (с запятой). Я только что попробовал, и это сработало для меня. – tarmes

2

Lua patterns предоставляет - модификатор для задач, как вы уже выше. Как указано на PiL - Section 20.2:

Модификатор + соответствует одному или более символов исходного класса. Он всегда будет иметь самую длинную последовательность, которая соответствует шаблону.

Вроде *, модификатор - также соответствует ноль или нескольким экземплярам из символов оригинального класса. Однако, вместо того, чтобы соответствовать самой длинной последовательности , она соответствует кратчайшему.

Затем, когда вы используете ., чтобы найти его, он найдет все символы, удовлетворяющие шаблону. Поэтому вы получите результат от первого появления name до тех пор, пока не будет найден ,department:Directing. Поскольку вы знаете, что это данные JSON, вы можете попытаться сопоставить для [^,]; то есть символы без запятой.

Таким образом, для случая попробовать:

local tAllNames = {} 
for sName in fixstrdirector:gmatch("name:([^,]-),department:Directing") do 
    tAllNames[ #tAllNames + 1 ] = sName 
end 

и все необходимые имена будет храниться в таблице tAllNames. Пример приведенного выше можно увидеть на странице codepad.

Смежные вопросы