用于字符串替换的正则表达式
regex for string substitution
我有一个文件包含这样的一些数据记录:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://purl.org/dc/terms/identifier> "1234502851114AA" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.mylab.org/mydata/schema#Node> .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.disit.org/km4city/schema#nodeType> "STRING_STRING_STRING" .
在每个条目中,我必须用脚本(java/python 或其他)替换像这样的行:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897" .
在数字末尾添加^^<http://www.w3.org/2001/XMLSchema#float>
:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084"^^<http://www.w3.org/2001/XMLSchema#float> .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897"^^<http://www.w3.org/2001/XMLSchema#float> .
你能帮我写一个正则表达式来帮助我进行替换吗?
实际正则表达式:
(pos#long>\s"\d)
只抓到pos#long> "1
非常感谢
好吧,为了匹配您要替换的行,您想要的正则表达式实际上比您拥有的要复杂一些:(.+wgs84_pos#(?:long|lat).+) \.
。这将匹配并捕获字符串中的现有文本。
在 Perl 中,您的替换代码看起来像这样(我将 Perl 脚本的其余部分留给您):
$line =~ s/(.+wgs84_pos\#(?:long|lat).+) \./^^<http:\/\/www.w3.org\/2001\/XMLSchema#float> ./g
这样做是捕获整个第一行,减去末尾的句点,然后在附加句点之前将其与您的附加代码段一起转储到新行中。
使用 (>\s"\d*\.{0,1}\d*"\s\.$)
您可以找到位于行尾的两个数字。然后您可以将 ^^<http://www.w3.org/2001/XMLSchema#float>
附加到该行。
或者,您可以替换搜索 (>\s"\d*\.{0,1}\d*"\s\.$)
并替换为 ^^<http://www.w3.org/2001/XMLSchema#float>
(已使用记事本++测试)。
我有一个文件包含这样的一些数据记录:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://purl.org/dc/terms/identifier> "1234502851114AA" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.mylab.org/mydata/schema#Node> .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.disit.org/km4city/schema#nodeType> "STRING_STRING_STRING" .
在每个条目中,我必须用脚本(java/python 或其他)替换像这样的行:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084" .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897" .
在数字末尾添加^^<http://www.w3.org/2001/XMLSchema#float>
:
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "10.983007809025084"^^<http://www.w3.org/2001/XMLSchema#float> .
<http://www.mylab.org/mydata/resource/1234502851114AA> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "43.721979606737897"^^<http://www.w3.org/2001/XMLSchema#float> .
你能帮我写一个正则表达式来帮助我进行替换吗?
实际正则表达式:
(pos#long>\s"\d)
只抓到pos#long> "1
非常感谢
好吧,为了匹配您要替换的行,您想要的正则表达式实际上比您拥有的要复杂一些:(.+wgs84_pos#(?:long|lat).+) \.
。这将匹配并捕获字符串中的现有文本。
在 Perl 中,您的替换代码看起来像这样(我将 Perl 脚本的其余部分留给您):
$line =~ s/(.+wgs84_pos\#(?:long|lat).+) \./^^<http:\/\/www.w3.org\/2001\/XMLSchema#float> ./g
这样做是捕获整个第一行,减去末尾的句点,然后在附加句点之前将其与您的附加代码段一起转储到新行中。
使用 (>\s"\d*\.{0,1}\d*"\s\.$)
您可以找到位于行尾的两个数字。然后您可以将 ^^<http://www.w3.org/2001/XMLSchema#float>
附加到该行。
或者,您可以替换搜索 (>\s"\d*\.{0,1}\d*"\s\.$)
并替换为 ^^<http://www.w3.org/2001/XMLSchema#float>
(已使用记事本++测试)。