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

Replace 如何仅为对象替换.ttl文件中的下划线,replace,notepad++,triplestore,turtle-rdf,Replace,Notepad++,Triplestore,Turtle Rdf,我有一个包含海龟语法的RDF三元组(主谓宾语)的文件(.ttl文件),在该文件中,我应该用空格替换每个uu,但仅用于三元组对象(主语和谓词必须保持不变)。 下面是一个例子(在我的例子中,每个对象都在双引号之间): “格雷姆基地”。 “格雷姆基地”。 我想得到: <http://dbpedia.org/resource/Animalia_(book)> <http://dbpedia.org/property/author> "Graeme Base" . <htt

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

“格雷姆基地”。
“格雷姆基地”。
我想得到:

<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]*")
(?:^\h+\h+“|\G(?!^))[^\n]+\K.(=[^”\n]*”)
解释

  • (?:
    非捕获组
    • ^
      断言字符串的开头
    • \h+\h+”
      匹配两次开合角括号,后跟1+水平空白字符,然后匹配
    • |
    • \G(?!^)
      在上一个匹配的末尾而不是开始处断言位置
  • 关闭非捕获组
  • [^\un]+\K\uu
    使用否定字符类对下划线或换行符进行1+次匹配,并忘记使用
    \K
    匹配的内容。然后匹配下划线
  • (?=[^”\n]*”
    正向前瞻,以断言右侧的内容是结束

在替换中使用空格。

您可以使用:

(?:^<[^\n<>]+>\h+<[^<>\n]+>\h+"|\G(?!^))[^_\n]+\K_(?=[^"\n]*")
(?:^\h+\h+“|\G(?!^))[^\n]+\K.(=[^”\n]*”)
解释

  • (?:
    非捕获组
    • ^
      断言字符串的开头
    • \h+\h+”
      匹配两次开合角括号,后跟1+水平空白字符,然后匹配
    • |
    • \G(?!^)
      在上一个匹配的末尾而不是开始处断言位置
  • 关闭非捕获组
  • [^\un]+\K\uu
    使用否定字符类对下划线或换行符进行1+次匹配,并忘记使用
    \K
    匹配的内容。然后匹配下划线
  • (?=[^”\n]*”
    正向前瞻,以断言右侧的内容是结束


在替换中使用空格。

很好的正则表达式技巧。需要记住的一点是,如果输入数据是规则的,这将很好地工作,但它对语法变化很脆弱。例如
“Graeme\u Base”;\n“Graeme\u Base”“
是此正则表达式不处理的合法语法-可能还有其他语法变体(集合、嵌套空白节点等)。另一种方法是使用RDF库来实际处理数据。很好的正则表达式技巧。需要记住的一件事是,虽然如果输入数据是规则的,这将很好地工作,但它对语法变化很脆弱。例如
“Graeme_Base”\n“Graeme_Base”。
是此正则表达式不处理的合法海龟语法-可能还有其他语法变体(集合、嵌套空白节点等)。另一种方法是使用RDF库来实际处理数据。