Проблемы с анализом регулярных выражений - PullRequest
1 голос
/ 15 февраля 2012

Я пытаюсь написать программу, используя команду lynx на этой странице "http://www.rottentomatoes.com/movie/box_office.php", и я не могу решить какую-то проблему ... получить заголовок сам по себе. Моя проблема - заголовок может содержать специальные символы, цифры и все заголовки переменной длины. Я хочу написать регулярное выражение, которое может анализировать всю страницу и найти строки, как это .... (Я добавил пробел между названием и следующим номером, то есть сколько недель прошло, чтобы провести различие между названием и выпущенными неделями)

1 -- 30%  The Vow                                           1 $41.2M $41.2M $13.9k 2958
2 -- 53%  Safe House                                        1 $40.2M $40.2M $12.9k 3119
3 -- 42%  Journey 2: The Mysterious Island                  1 $27.3M $27.3M $7.9k 3470
4 -- 57%  Star Wars: Episode I - The Phantom Menace (in 3D) 1 $22.5M $22.5M $8.5k 2655
5 1  86%  Chronicle                                         2 $12.1M $40.0M $4.2k 2908

регулярное выражение, с которого я начал, это:

/(\d+)\s(\d+|\-\-)\s(\d+\%)\s

Если кто-то может помочь мне понять, как успешно захватить заголовок, это будет очень цениться! Спасибо заранее.

1 Ответ

2 голосов
/ 15 февраля 2012

Захватите все вещи !!

^(\d+)\s+(\d+|\-\-)\s+(\d+\%)\s+(.*)\s+(\d+)\s+(\$\d+(?:.\d+)?[Mk])\s+(\$\d+(?:.\d+)?[Mk])\s+(\$\d+(?:.\d+)?[Mk])\s+(\d+)$

Объяснил:

^                            <- Start of the line
    (\d+)\s+                 <- Numbers (captured) followed by as many spaces as you want
    (\d+|\-\-)\s+            <- Numbers [or "--"] (captured) followed by as many spaces as you want
    (\d+\%)\s+               <- Numbers [with '%'] (captured) followed by as many spaces as you want
    (.*)\s+                  <- Anything you can match [don't be greedy] (captured) followed by as many spaces as you want
    (\d+)\s+                 <- Numbers (captured) followed by as many spaces as you want
    (\$\d+(?:.\d+)?[Mk])\s+  <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want
    (\$\d+(?:.\d+)?[Mk])\s+  <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want
    (\$\d+(?:.\d+)?[Mk])\s+  <- "$" and Numbers [with floating point] and "M or k" (captured) followed by as many spaces as you want
    (\d+)                    <- Numbers (captured)
$                            <- End of the line

Итак, если серьезно, то, что я сделал, я немного обманул и поймалвсе (как я думаю, что вы сделаете в конце концов), чтобы получить представление о захвате названия.

В не жадном регулярном выражении (.*) [или (.*?), если вы хотите вызвать "несгибаемость""] захватит наименьшее количество возможных символов, и конец регулярного выражения пытается захватить все остальное.

Ваше регулярное выражение заканчивает тем, что захватывает только заголовок (единственное, что осталось).

Что выможно использовать реальный прогноз и делать утверждения.


Ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...