我有一个文件包含乌龟语法(.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" .
最简单,最快的方法是什么?文件很大,因此我不能一次替换下划线。我已经尝试过在记事本++中使用正则表达式,但是我不明白如何排除主题和谓词。
非常感谢您的帮助
答案 0 :(得分:2)
您可以使用:
(?:^<[^\n<>]+>\h+<[^<>\n]+>\h+"|\G(?!^))[^_\n]+\K_(?=[^"\n]*")
说明
(?:
非捕获组
^
声明字符串的开头<[^\n<>]+>\h+<[^<>\n]+>\h+"
匹配2次开/关尖括号,后跟1+个水平空格字符,然后匹配"
|
或\G(?!^)
在上一场比赛的末尾而不是在开始时断言)
关闭非捕获组[^_\n]+\K_
使用否定的字符类匹配1次以上而不是下划线或换行符,并且忘记使用\K
匹配的内容。然后匹配下划线。(?=[^"\n]*")
要肯定右边的断言"
在替换中使用空格。