Удалить не-альфазы, игнорируя некоторые юникодные символы

Вы можете использовать оператор .. или range чтобы ограничить подстановки начальными / конечными разделами:

while () {
   if ( /\\begin/ .. /\\end/ ) {
       s/^(?!\\)/\\item /;  
   }
   print;
}

__DATA__
7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}

1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerat

Если вы предпочитаете сценарий командной строки:

perl -ne 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /};print'

Или, короче, с неявной печатью :

perl -pe 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /}'

(?!. ..) - утверждение с отрицательным прогнозом.

0
29.12.2018, 16:19
1 ответ

tr/a-z/ /cs;попросит заменить пробелами все символы, которых нет в наборе a-z. (Замыкающий cдолжен дополнять набор, иначе он заменит все символы от aдо z.)

Вы должны быть более конкретными. s/[[:punct:]]+/ /gзаменит все последовательности знаков препинания на одиночные пробелы, а s/[^[:alpha:]]+/ /gзаменит все последовательности не -буквенных символов на одиночные пробелы.

Обратите внимание, что по крайней мере [:alpha:]будет зависеть от локали -, и вам нужно указать Perl использовать UTF -8 с -Cили подобным. Также обратите внимание, что [^[:alpha:]]также удаляет цифры и завершающий символ новой строки. Это локаль en_US.UTF-8в Debian :

.
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
 përgjithshme është kilometra katrorë $ 

$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[[:punct:]]+/ /g'
 përgjithshme   është   28 748   kilometra katrorë 
$ 
2
28.01.2020, 02:30

Теги

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