как найти пунктуацию в строке, используя perl - PullRequest
0 голосов
/ 09 февраля 2020

Мне нужно выполнить поиск всех знаков препинания в содержании языка разметки.

Мой ввод Пример содержимого:

__DATA__

Kerala unterscheidet smtp: // suriya@edu/tester sich von anderen indischen netftp: // suriya@edu Bundesstaaten: Es ist sauberer, der;Verkehr nicht so.chaotisch, und Kirchen säumen d ie Штрассен. D ie Регион Айнмалиг Махен Абер d ie Подпоры www.cochin.org

Я использую [[:punct:]], однако эти узлы будут извлекать все вхождения в содержимом.

my $text = do { local $/; <DATA> };

while($text=~m/(.){5}[[:punct:]](.){10}/g)
{
    print "L: $&\n";
}

Вывод

k rel="styleshee  
 type="text/css"
 href="../styles
g src="../images
17873_140_1.jpg"
 alt="image" cla
s nat&x00FC;rlic
xmlns="http://ww
3.org/1999/xhtml
" xml:lang="de"
ioses:Zeugnis na
x00FC;rlicher Pe
ugnis.nat&x00FC;

Но мне нужно опустить пунктуацию в атрибутах элементов и их значениях. Как я могу перечислить пунктуацию, которая доступна в содержании.

Избегать: www.w3.org и "../styles/97 Необходимо найти: der;Verkeh и so.chaotisch

Вопрос обновлен:

Не удаляйте контент или html элементы, чтобы получить знаки препинания в строке, поскольку нам нужно получить точный номер строки и точный номер столбца. Если мы удалили номер столбца html, необходимо изменить номер.

Может ли кто-нибудь помочь мне в этом.

1 Ответ

2 голосов
/ 10 февраля 2020

Есть отличный ответ, объясняющий, почему вы не должны пытаться разобрать HTML с регулярным выражением - { ссылка }

Вы можете использовать HTML :: Parse и HTML :: FormatText для извлечения текста:

 perl -MHTML::Parse -MHTML::FormatText -0777 -ne \
    'print HTML::FormatText->new->format(parse_html($_))' sample.txt

Вы получите только текст:

Kerala unterscheidet smtp://suriya@edu/tester sich von anderen indischen
   netftp://suriya@edu Bundesstaaten: Es ist sauberer, der;Verkehr nicht
   so.chaotisch, und Kirchen säumen die Straßen. Die Region einmalig
   machen aber die Backwaters www.cochin.org

Тогда вы сможете использовать свой оригинальный код. Примерно так должно работать:

#!/usr/bin/perl

use strict;
use warnings;

use HTML::Parse;
use HTML::FormatText;

my $text = do { local $/; <DATA> };

$text = HTML::FormatText->new(leftmargin=>0, rightmargin=>100000000000)->format(parse_html($text));

while($text=~m/(.){5}[[:punct:]](.){10}/g)
{
        print "L: $&\n";
}

__DATA__
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" ><strong>Kerala unterscheidet</strong> smtp://suriya@edu/tester sich von anderen indischen netftp://suriya@edu Bundesstaaten: Es ist sauberer, der;Verkehr nicht so.chaotisch, und Kirchen säumen die Straßen. Die Region einmalig machen aber die Backwaters <a href="http://www.cochin.org">www.cochin.org</a><link rel="stylesheet" type="text/css" href="../styles/9783734317873.css"/>

Примечание: leftmargin / rightmargin настроены на предотвращение переноса текста, выполняемого модулем HTML :: FormatText

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