Удалить номера цитирования в тексте, но не десятичные числа без ссылок на группы? (регулярное выражение) - PullRequest
2 голосов
/ 03 августа 2020

Я написал небольшую python программу для внесения изменений в регулярное выражение и преобразования моего учебника в формате PDF в аудиофайлы, которые можно слушать во время вождения. Мне пришло в голову, что я мог бы использовать программу чтения PDF-файлов Librera Reader, которая имеет встроенную замену TTS и регулярных выражений, чтобы выполнять эту задачу более гибко и при этом легко читать. Однако Librera Reader не может использовать групповую ссылку в тексте замены.

Это замена, которую я использовал:

([a-zA-Z|\)|%][\.|\,|a-z|\)])\d+(?:[-,]\d+)*

Вот упрощенная версия, работать для цели этого вопроса:

([a-zA-Z][\.])\d+

Заменено на:

\1

Есть ли способ использовать Regex для захвата буквы, за которой следует точка, за которой следует число, подобное этому без использования ссылки на группу при замене и без записи строки номера периода. чтобы я мог сделать следующее преобразование:

тестовых слов.7 Также 1,5 - это число, которое можно проверить. 9

тестовых слов. Также 1.5 - это число, которое можно протестировать.

1 Ответ

0 голосов
/ 03 августа 2020

Насколько я понимаю, вы использовали | внутри [...], чтобы «лучше» визуально отделить части символьного класса, но вы также сделали | частью класса, которая теперь соответствует литеральному каналу. Вам необходимо удалить эти каналы.

Чтобы решить текущую проблему, вы можете превратить группу захвата в положительный просмотр назад, потому что шаблон имеет известную длину (только два символа перед числом (диапазоном), которое вы хотите удалить

Вы можете использовать

(?<=[a-zA-Z)%][.,a-z)])\d+(?:[-,]\d+)*

См. Демонстрацию regex

Положительный просмотр назад (?<=[a-zA-Z)%][.,a-z)]) соответствует местоположению, которому непосредственно предшествует

  • [a-zA-Z)%] - буква ASCII, ) или %, а затем
  • [.,a-z)] - ., ,, строчная буква ASCII или ).
...