如何仅为对象替换 .ttl 文件中的下划线

How to replace underscores in a .ttl file only for objects

我有一个包含 turtle 语法(.ttl 文件)的 RDF 三元组(主谓宾)的文件,其中我应该用 space 替换每个 _,但仅适用于三重宾语(主语和谓词必须保持不变)。 下面是一个示例(在我的例子中,每个对象都在双引号 " 之间):

<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" .

实现此目标最简单、最快的方法是什么?这些文件非常大,所以我不能一次一个地替换下划线。我试过在记事本++中使用正则表达式,但我不明白如何排除主题和谓词。

非常感谢您的帮助

您可能会使用:

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

说明

  • (?:非捕获组
    • ^ 断言字符串开始
    • <[^\n<>]+>\h+<[^<>\n]+>\h+" 匹配 2 次开闭尖括号,后跟 1+ 个水平白色 space 字符,然后匹配 "
    • |
    • \G(?!^) 在上一场比赛结束时声明位置,而不是在开始时
  • )关闭非捕获组
  • [^_\n]+\K_ 使用否定字符 class 匹配 1+ 次非下划线或换行符并忘记使用 \K 匹配的内容。然后匹配下划线。
  • (?=[^"\n]*") 肯定的前瞻断言右边的是结束 "

Regex demo

在替换中使用 space.