Hi,
ich hab mal wieder ein problem mit textersetzung..
und zwar muss ich in xml-files folgende zeichenfolgen ersetzen
ach ja.. ich benötige immer den TEXT
[[ TEXT ]] -> gut dass ist einfach und bekomm ich auch hin
[[[ TYP ] TEXT ]] -> hier sieht das ganze schon nicht mehr so toll aus..
[[[ TYP ] LINK [ TEXT ]]] -> vom ansatz wahrscheinlich genauso zu lösen wie 2 .. trotzdem doof!
kann mir da jemand helfen?
wär super
slide
textersetzung
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
da wo das ganze klammerngedöns is.. soll später nur der "TEXT" stehen
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
ich kann leider nicht eionfach alle klammern löschen.. gibt zuviele eckige klammern die ich noch benötige :/
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
ok
in der xml-datei kommen folgende konstrukte vor
[[KM 1: KM-Planung]]
[[[resource]Produktentstehung]]
[[[artifact] INDEX [Produkte]]]
eben nach folgendem schema
[[ TEXT ]]
[[[ TYP ] TEXT ]]
[[[ TYP ] LINK [ TEXT ]]]
nachher soll dies anstatt der konstrukte in der file stehen bleiben
KM 1: KM-Planung
Produktentstehung
Produkte
die xml-files sind exportierte dateien.. und da mein tool wo ich diese files einbinden muss manches nicht versteht.. (und wir manches auch gar nicht benötigen).. muss ich das halt umbasteln dass die unwichtige information.. angabe von typ und link rausfällt.. genauso wie eben die eckigen klammern.. aber halt auch nur da wo dieses konstrukt zutrifft.. alle eckigen klammern dürfen nicht gelöscht werden
slide
in der xml-datei kommen folgende konstrukte vor
[[KM 1: KM-Planung]]
[[[resource]Produktentstehung]]
[[[artifact] INDEX [Produkte]]]
eben nach folgendem schema
[[ TEXT ]]
[[[ TYP ] TEXT ]]
[[[ TYP ] LINK [ TEXT ]]]
nachher soll dies anstatt der konstrukte in der file stehen bleiben
KM 1: KM-Planung
Produktentstehung
Produkte
die xml-files sind exportierte dateien.. und da mein tool wo ich diese files einbinden muss manches nicht versteht.. (und wir manches auch gar nicht benötigen).. muss ich das halt umbasteln dass die unwichtige information.. angabe von typ und link rausfällt.. genauso wie eben die eckigen klammern.. aber halt auch nur da wo dieses konstrukt zutrifft.. alle eckigen klammern dürfen nicht gelöscht werden
slide
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...
Hi zusammen,
wenn ich das richtig kapiert hab
Da ich nicht viel Ahnung von Regulären ausdrücken habe,
hier mal mein gefrickel
Ich hab keine Ahnung wie sich das mit XML besonders mit CDATA Bereichen verträgt. Musst Du ausprobieren.
MfG
Andreas (XT@ngel)
wenn ich das richtig kapiert hab
Da ich nicht viel Ahnung von Regulären ausdrücken habe,
hier mal mein gefrickel
Code: Alles auswählen
unit1 = "[[KM 1: KM-Planung]]"
unit2 = "[[[resource]Produktentstehung]]"
unit3 = "[[[artifact] INDEX [Produkte]]]"
import re
print "---"
print unit1
unit1_c = re.compile("\[\[(.+?)\]\]", re.I|re.S)
unit1 = unit1_c.sub("Der Text: \\1", unit1)
print unit1
print "----"
print unit2
unit2_c = re.compile("\[\[\[(.+?)\](.+?)\]\]", re.I|re.S)
unit2 = unit2_c.sub("\\1 , \\2", unit2) # \\1 = Type, \\2 = Text
print unit2
MfG
Andreas (XT@ngel)
Soweit ich die aufgabe verstanden habe, wäre das vielleicht ein weg:
Ich hab mal ersatzweise spitze klammern genommen, weil man sonst vor lauter backslashes ganz wuschig wird. joe
Code: Alles auswählen
import re
text = """<<KM 1: KM-Planung>>
<<<resource>Produktentstehung>>
<<<artifact> INDEX <Produkte>>> """
text = re.sub("<<<[^>]*>[^<]*<([^>]*)>>>(?m)",r"\1",text)
text = re.sub("<<<[^>]*>([^>]*)>>(?m)",r"\1",text)
text = re.sub("<<([^>]*)>>(?m)",r"\1",text)
print text
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Ahhh, meine Augen!!!
Gruß, mawe
Code: Alles auswählen
import re
text = '''
hallo [lalu] [[ TEXT ]] lala
zizi [[[ TYP ] TEXT ]] gaga
baba [[[ TYP ] LINK [ TEXT ]]] l [u] lu
'''
for line in text.split("\n"):
line = re.sub("\[\[\[?.*?([^\[\]]*)\]\]\]?", r"\1", line)
print line
Gruß, mawe
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
super genial..
besten dank jungs.. das hat mir echt geholfen..
der erste testlauf sagt.. es funzt 1A ... werd jetzt noch ein wenig testen..
@ mawe .. könntest du mir deine regex evtl ein wenig erklären?
prinzipiell komm ich zwar damit zurecht aber das wars auch schon
slide
besten dank jungs.. das hat mir echt geholfen..
der erste testlauf sagt.. es funzt 1A ... werd jetzt noch ein wenig testen..
@ mawe .. könntest du mir deine regex evtl ein wenig erklären?
prinzipiell komm ich zwar damit zurecht aber das wars auch schon
slide
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Hoffe das hilft ein wenig
Gruß, mawe
Code: Alles auswählen
#-*- coding: utf-8 -*-
import re
text = '''
hallo [lalu] [[ TEXT ]] [[[ TYP ] TEXT ]] lala
zizi [[[ TYP ] TEXT ]] gaga
baba [[[ TYP ] LINK [ TEXT ]]] l [u] lu
'''
pattern = re.compile(r"""
\[\[ # 2 öffnende eckige Klammern
\[? # vielleicht noch eine? (das ? bedeutet: 0 oder 1 mal)
.*? # irgendein Zeichen, 0 oder mehrmals (*), nicht gierig (?)
( # alles was in den () steht, interessiert uns, darauf
# können wir später mit \1 zugreifen
[^\[\]]* # [] definiert eine Zeichenmenge , also [ab] passt auf a und auf b
# das ^ in den [] negiert das, hier also: passt, wenn das Zeichen
# kein [ oder ] ist
# das ganze 0 oder mehrmals -> also der TEXT
) # das war alles was uns interessiert
\]\] # zum Schluss kommen noch mal 2 schliessende ]
\]? # und eventuell noch eine
""", re.VERBOSE)
for line in text.split("\n"):
line = re.sub(pattern, r"\1", line)
print line
Gruß, mawe
Hi!
Wobei die beiden bedingungen aber probleme machen können, da sie unabhängig voneinander sind. Der re erkennt z.B. auch [[ TYP ] LINK [ TEXT ]]] oder auch [[[ TYP ] LINK [ TEXT1 ]] TEXT2] als gültig. Da stößt man mit regexps schnell an grenzen. Man braucht wohl mehrere regexps um die varianten eindeutig abzuprüfen. joemawe hat geschrieben:Code: Alles auswählen
\[? # vielleicht noch eine? (das ? bedeutet: 0 oder 1 mal) \]? # und eventuell noch eine
-
- User
- Beiträge: 51
- Registriert: Freitag 10. Dezember 2004, 09:05
- Wohnort: Erlangen
- Kontaktdaten:
nein das ist kein problem..
die xml-dateien werden automatisch generiert..
und es kommen nur die 3 erwähnten konstrukte vor.. alle haben die gleiche form .. keine abwandlungen!
ich hab heute 3 testläufe gemacht.. und die regex hat ganz hervorragend funktioniert!
die xml-dateien werden automatisch generiert..
und es kommen nur die 3 erwähnten konstrukte vor.. alle haben die gleiche form .. keine abwandlungen!
ich hab heute 3 testläufe gemacht.. und die regex hat ganz hervorragend funktioniert!
How many people can read hex if only you and dead people can read hex?
There are 10 types of people in the world: Those who understand binary, and those who don't...
There are 10 types of people in the world: Those who understand binary, and those who don't...