Как я могу извлечь все цитаты в тексте? - PullRequest
5 голосов
/ 05 декабря 2008

Я ищу SimpleGrepSedPerlOrPythonOneLiner , который выводит все цитаты в тексте.


Пример 1:

echo “HAL,” noted Frank, “said that everything was going extremely well.” | SimpleGrepSedPerlOrPythonOneLiner

стандартный вывод:

"HAL,"
"said that everything was going extremely well.”

Пример 2:

cat MicrosoftWindowsXPEula.txt | SimpleGrepSedPerlOrPythonOneLiner

стандартный вывод:

"EULA"
"Software"
"Workstation Computer"
"Device"
"DRM"

и т.д.

( ссылка на соответствующий текст ).

Ответы [ 4 ]

7 голосов
/ 05 декабря 2008

Мне нравится это:

perl -ne 'print "$_\n" foreach /"((?>[^"\\]|\\+[^"]|\\(?:\\\\)*")*)"/g;'

Это немного многословно, но оно обрабатывает экранированные кавычки и возвращает их намного лучше, чем простейшая реализация. Что это говорит:

my $re = qr{
   "               # Begin it with literal quote
   ( 
     (?>           # prevent backtracking once the alternation has been
                   # satisfied. It either agrees or it does not. This expression
                   # only needs one direction, or we fail out of the branch

         [^"\\]    # a character that is not a dquote or a backslash
     |   \\+       # OR if a backslash, then any number of backslashes followed by 
         [^"]      # something that is not a quote
     |   \\        # OR again a backslash
         (?>\\\\)* # followed by any number of *pairs* of backslashes (as units)
         "         # and a quote
     )*            # any number of *set* qualifying phrases
  )                # all batched up together
  "                # Ended by a literal quote
}x;

Если вам не нужна такая большая мощность - скажем, это скорее всего диалог, а не структурированные цитаты, тогда

/"([^"]*)"/ 

, вероятно, работает так же хорошо, как и все остальное.

5 голосов
/ 05 декабря 2008

Решение regexp не будет работать, если у вас есть вложенные кавычки, но для ваших примеров это хорошо работает

$ echo \"HAL,\" noted Frank, \"said that everything was going extremely well\"  
 | perl -n -e 'while (m/(".*?")/g) { print $1."\n"; }'
"HAL,"
"said that everything was going extremely well"

$ cat eula.txt| perl -n -e 'while (m/(".*?")/g) { print $1."\n"; }'
"EULA"
"online"
"Software"
"Workstation Computer"
"Device"
"multiplexing"
"DRM"
"Secure Content"
"DRM Software"
"Secure Content Owners"
"DRM Upgrades"
"WMFSDK"
"Not For Resale"
"NFR,"
"Academic Edition"
"AE,"
"Qualified Educational User."
"Exclusion of Incidental, Consequential and Certain Other Damages"
"Restricted Rights"
"Exclusion des dommages accessoires, indirects et de certains autres dommages"
"Consumer rights"
4 голосов
/ 05 декабря 2008
grep -o "\"[^\"]*\""

Это greps для " + всего, кроме цитаты, любое количество раз + "

-o позволяет выводить только сопоставленный текст, а не всю строку.

0 голосов
/ 31 марта 2010
grep -o '"[^"]*"' file

Опция '-o' для печати только рисунка

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