Что-то не так с этим RegEx? - PullRequest
2 голосов
/ 01 августа 2010

Я использую RegEx для XML-дампа статьи из Википедии.

регулярное выражение = {{[a-zA-Z0-9_\(\)\|\?\s\-\,\/\=\[\]\:.]+}}

Я хочу обнаружить весь текст, завернутый в {{ и }}. Но вместо того, чтобы обнаружить 56 совпадений, которые я получил в результате простого поиска с {{, он обнаруживает только 45.

пример блока, который он не обнаруживает, {{cite journal | last = Heeks | first = Richard | year = 2008 | title = Meet Marty Cooper - the inventor of the mobile phone | journal = BBC | volume = 41 | issue = 6 | url = http://news.bbc.co.uk/2/hi/programmes/click_online/8639590.stm | pages = 26–33 | doi = 10.1109/MC.2008.192 }} ..

но обнаруживает, {{cite web | title = Of Cigarettes and Cellphones | last = Ulyseas | first = Mark | date = 2008-01-18 | url = http://www.thebalitimes.com/2008/01/18/of-cigarettes-and-cellphones/ | publisher = The Bali Times | accessdate = 2008-02-24 }}

Может кто-нибудь, пожалуйста, определите мне проблему?

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Некоторые побеги излишни, но я не думаю, что это настоящая проблема.

Я рекомендую попробовать \w вместо a-zA-Z0-9_, особенно потому, что в .NET regex \w также распознает букву Unicode (если только она не находится в режиме совместимости с ECMAScript).

Другая альтернатива заключается в том, что если текстовая часть не может содержать } (что сейчас не может в любом случае), вы также можете использовать просто {{[^}]+}}.

[^...] - это отрицательный класс символов . [^}] соответствует всему, кроме }.

Ссылки

Похожие вопросы

1 голос
/ 01 августа 2010

Ваш класс персонажа ... особенный.Для начала, все, что вы подходите, покрывается . в конце.Кроме того, фигурные скобки ({}) являются специальными символами, поэтому их следует экранировать.Наконец, вы захотите заставить его не быть жадным, добавив ? после этого +, в противном случае он будет соответствовать фигурным скобкам.Я сказал, но я хотел бы отметить, что я ошибся почти во всем в этом посте (кроме того, что скобки следует избегать, что является лишь вопросом хорошей практики).

0 голосов
/ 01 августа 2010

регулярное выражение {{(.*?)}} хорошо работает для меня в Perl.Ловит все между двумя вложенными скобками.

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