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

时间:2019-04-12 08:06:36

标签: replace notepad++ triplestore turtle-rdf

我有一个文件包含乌龟语法(.ttl文件)中的RDF三元组(主题谓词对象),在其中我应将每个_替换为一个空格,但仅用于三元组对象(主题和谓词必须保持相同) 。 以下是一个示例(在我的情况下,每个对象都位于双引号“”之间):

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

最简单,最快的方法是什么?文件很大,因此我不能一次替换下划线。我已经尝试过在记事本++中使用正则表达式,但是我不明白如何排除主题和谓词。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您可以使用:

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

说明

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

Regex demo

在替换中使用空格。