Замените регулярное выражение в строках, начинающихся с {\ s между первым пробелом до;} - PullRequest
0 голосов
/ 08 июня 2018

У меня есть несколько поврежденных файлов RTF с такими строками:

{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}
                                          ^----------------------------^

Я хочу заменить все [^ a-zA-Z0-9 _ \ {};] но только в строках, начинающихся с "{\ s" и заканчивающихся на "};"от первого "пробела" до "};"

первых "пробела" и "};"не должен заменяться.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Если вы можете использовать sed в терминале, вы можете сделать что-то вроде этого.

sed -i 's/^\({\\s[^ ]*\s\).*\(\;}\)\(}\)\?$/\1\2/' filename

Превратил мой файл, содержащий:

{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}

В:

{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 ;}
0 голосов
/ 08 июня 2018

Итак, я не уверен, какой язык / технологию вы хотели бы использовать здесь, но если вы хотите использовать C #, вы можете проверить этот предыдущий вопрос .Ответ дает вам почти все.

Для вашего примера:

var text = @"{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}";
var pattern = @"^({\\s\S*\s[a-zA-Z0-9_\{}; ]*)([^a-zA-Z0-9_\{}; ]*)([^}]*})";
var replaced = System.Text.RegularExpressions.Regex.Replace(text, pattern, "$1$3");

Это позволит вам заменить один непрерывный блок плохих символов, который относится к вашему примеру, но, к сожалению, нетваш вопрос.Возможно, есть более элегантное решение, но я думаю, что вам придется многократно запускать это выражение до тех пор, пока входные и выходные данные Regex.Replace () не будут равны.

0 голосов
/ 08 июня 2018

Вы не указали язык, вот Regex101 пример:

({\\s.+?\s)(.*)(})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...