2016-07-23 9 views
-3

Ich habe eine Datei einige Datensätze wie folgt enthalten:regex für String-Ersetzung

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

In jedem dieser Eintrag habe ich die Zeilen wie diese mit einem Skript (Java/Python oder andere) ersetzen:

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

Zugabe des ^^<http://www.w3.org/2001/XMLSchema#float> am Ende der Zahlen:

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

können Sie mir helfen mit einer Regex, die mir für die Substitution helfen?

Actual regex:

(pos#long>\s"\d) 

Es fangen nur pos#long> "1

Vielen Dank

+1

Was haben Sie bisher versucht? Sie sind hier lange genug, um zu verstehen, dass dies kein Ort ist, an dem Sie Ihre Anforderungen fallen lassen und andere Leute die Arbeit für Sie erledigen. – GhostCat

Antwort

1

Nun, die Zeilen, die Sie ersetzen möchten übereinstimmen, die Regex Sie wollen, ist eigentlich ein bisschen mehr komplexer als das, was Sie haben: (.+wgs84_pos#(?:long|lat).+) \.. Dadurch wird der vorhandene Text in der Zeichenfolge abgeglichen und erfasst.

In Perl, Ihr Ersatz Code würde wie folgt aussehen (ich lasse den Rest des Perl-Skripts an Sie):

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

Was das bedeutet ist die Gesamtheit der ersten Zeile zu erfassen, abzüglich die Zeitraum am Ende, dann drop es in die neue Zeile zusammen mit Ihrem zusätzlichen Ausschnitt vor dem Anhängen eines Punktes.

+0

Ich ersetze mit Sublime mit Ihrer Regex. Diese Regex ist perfekt, vielen Dank! – michele

+0

Ich bin glücklich zu helfen. –

1

Mit (>\s"\d*\.{0,1}\d*"\s\.$) können Sie beide Nummern finden, wenn sie am Ende der Zeile sind. Dann können Sie einfach ^^<http://www.w3.org/2001/XMLSchema#float> an diese Zeile anhängen. Alternativ können Sie die Suche nach (>\s"\d*\.{0,1}\d*"\s\.$) ersetzen und durch $1 ^^<http://www.w3.org/2001/XMLSchema#float> ersetzen (getestet mit Notepad ++).