字符串替换的正则表达式

时间:2016-07-23 13:03:07

标签: java python regex replace 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

非常感谢

2 个答案:

答案 0 :(得分:1)

好吧,为了匹配你想要替换的行,你想要的正则表达式实际上比你拥有的更复杂:(.+wgs84_pos#(?:long|lat).+) \.。这将匹配并捕获字符串中的现有文本。

在Perl中,您的替换代码看起来像这样(我将剩余的Perl脚本留给您):

$line =~ s/(.+wgs84_pos\#(?:long|lat).+) \./$1^^<http:\/\/www.w3.org\/2001\/XMLSchema#float> ./g

这样做是捕获第一行的全部内容,减去结尾的句号,然后在附加句点之前将其与附加片段一起转储到新行中。

答案 1 :(得分:1)

使用(>\s"\d*\.{0,1}\d*"\s\.$),如果它们位于该行的末尾,您可以找到这两个数字。然后,您只需将^^<http://www.w3.org/2001/XMLSchema#float>附加到该行。

或者,您可以替换搜索(>\s"\d*\.{0,1}\d*"\s\.$)并替换为$1 ^^<http://www.w3.org/2001/XMLSchema#float>(使用记事本++测试)。