Как заменить подчеркивание в файле .ttl только для объектов - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть файл, содержащий тройки RDF (субъект-предикат-объект) в синтаксисе черепахи (файл .ttl), в котором я должен заменять каждый _ пробелом, но только для тройных объектов (субъекты и предикаты должны оставаться неизменными),Примером является следующий (в моем случае каждый объект находится между двойными кавычками "):

<http://dbpedia.org/resource/Animalia_(book)> <http://dbpedia.org/property/author> "Graeme_Base" .
<http://dbpedia.org/resource/Animalia_(book)> <http://dbpedia.org/property/illustrator> "Graeme_Base" .

Я хотел бы получить:

<http://dbpedia.org/resource/Animalia_(book)> <http://dbpedia.org/property/author> "Graeme Base" .
<http://dbpedia.org/resource/Animalia_(book)> <http://dbpedia.org/property/illustrator> "Graeme Base" .

Какой самый простой и быстрый способдобиться этого? Файлы очень большие, поэтому я не могу заменить подчеркивания по одному за раз. Я пытался использовать регулярные выражения в Notepad ++, но я не понимаю, как исключить тему и предикат.

Большое спасибо за помощь

1 Ответ

2 голосов
/ 12 апреля 2019

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

(?:^<[^\n<>]+>\h+<[^<>\n]+>\h+"|\G(?!^))[^_\n]+\K_(?=[^"\n]*")

Объяснение

  • (?: Группа без захвата
    • ^ Подтвердить началострока
    • <[^\n<>]+>\h+<[^<>\n]+>\h+" Соответствует 2 раза открывающей-закрывающей угловой скобке, за которой следует 1+ горизонтальных пробельных символов, а затем соответствует "
    • | или
    • \G(?!^) Утверждение позиции в конце предыдущего матча, а не в начале
  • ) Закрыть группу без захвата
  • [^_\n]+\K_ Матч 1+ раз не подчеркиваниеили перевод строки с использованием отрицательного символьного класса и забытие того, что было найдено с помощью \K.Затем сопоставьте подчеркивание.
  • (?=[^"\n]*") Позитивный взгляд вперед, чтобы подтвердить, что справа - закрытие "

Regex demo

При замене используйте пробел.

...