Hi!,
Nachdem ich in comp.lang.python gefragt habe, und immer noch
keine Lösunge für mein Problem habe, wende ich mich an Euch.
Selber bin ich auch nicht allzu versiert mit RE.
Problem: Suche einen Ausdruck, der sowohl Dos (Windows)
CRLF und Unix LF die überstehenden Leerzeichen und auch tabs entfernt.
Leider habe ich mit folgendem keinen Erfolg (arbeitet nur für Unix):
>>> import re
>>> retrailingwhitespace = re.compile('(?<=\S)[ \t]+$', re.MULTILINE)
1) Windows
>>> r="erewr \r\nafjdskl "
>>> newtext, n = retrailingwhitespace.subn('', r)
>>> n
1
>>> newtext
'erewr \r\nafjdskl'
2) Unix
>>> r="erewr \nafjdskl "
>>> newtext, n = retrailingwhitespace.subn('', r)
>>> n
2
>>> newtext
'erewr\nafjdskl'
>>>
Danke schonmal (bin mir sicher, ihr wisst da was. ).
regex für "Remove Trailing Whitespace" gesucht
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Code: Alles auswählen
text = re.sub(r'^\s+(?usm)', '', text)
TUFKAB – the user formerly known as blackbird
Hallo,blackbird hat geschrieben:Code: Alles auswählen
text = re.sub(r'^\s+(?usm)', '', text)
verstehe ich nicht ganz (Der Ausdruck macht auch nichts):
Code: Alles auswählen
>>> r="erewr \nafjdskl "
>>> re.sub(r'^\s+(?usm)', '', r)
'erewr \nafjdskl '
Hallo,
versuch es mal hiermit:
Gruss, Helmut
versuch es mal hiermit:
Code: Alles auswählen
t='alle meine Entchen \t\t'
regex = re.compile('\s*$')
regex.sub("",t)
print t #'alle meine Entchen'
Danke, berücksichtigt leider keine Lineendings.helmut hat geschrieben:Hallo,
versuch es mal hiermit:Gruss, HelmutCode: Alles auswählen
t='alle meine Entchen \t\t' regex = re.compile('\s*$') regex.sub("",t) print t #'alle meine Entchen'
Ich glaube, ich habe eine Lösung gefunden.
Zwar nicht schön, aber doch einfach genug.
Gegeben: Alle Lineendings in einem File sind gleich (also nicht gemischt).
swin="erewr \r\nafjdskl "
sunix="erewr \nafjdskl "
Werte einmal aus, welche Art von Lineendings das ist.
(Suche nach mindestens einem '\r')
r ist der Inhalt von File
Code: Alles auswählen
helpchar = ''
if r.find('\r') != -1:
helpchar = '\r'
retrailingwhitespacelf = re.compile('(?<=\S)[ \t'+helpchar+']+$', re.MULTILINE)
newtext, n = retrailingwhitespace.subn(helpchar, r)
if n > 0:
r = newtext
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Was ist damit?
EDIT: Das is vielleicht besser:
Gruß, mawe
Was ist damit?
Code: Alles auswählen
In [13]: r = "erewr \t \r\nafjdskl "
In [14]: re.sub(r'\s*(\n|$)', '\n', r)
Out[14]: 'erewr\nafjdskl\n'
Code: Alles auswählen
In [18]: re.sub(r'\s*(\n|$)', r'\1', r)
Out[18]: 'erewr\nafjdskl'
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Sorry. Der war für leading whitespaces. Hier für ending:Francesco hat geschrieben:Hallo,blackbird hat geschrieben:Code: Alles auswählen
text = re.sub(r'^\s+(?usm)', '', text)
verstehe ich nicht ganz (Der Ausdruck macht auch nichts):
Was ist das (?usm)?Code: Alles auswählen
>>> r="erewr \nafjdskl " >>> re.sub(r'^\s+(?usm)', '', r) 'erewr \nafjdskl '
Code: Alles auswählen
text = re.sub(r'\s+$(?m)', '', text)
Hier hätte (?m) gereicht, aber ich hatte das jetzt einfach noch so im Kopf, wiel es das standard Pattern ist, das ich hinten anhänge
TUFKAB – the user formerly known as blackbird
Danke Euch beiden; ist es aber auch nicht ganz.
in beiden Fällen verschwindet das '\r'.
Code: Alles auswählen
>>> swin="erewr \r\nafjdskl "
>>> re.sub(r'\s*(\n|$)', r'\1', swin)
'erewr\nafjdskl'
>>> re.sub(r'\s+$(?m)', '', swin)
'erewr\nafjdskl'
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Irgendwie logisch oder? \r ist ein newline char.Francesco hat geschrieben:Danke Euch beiden; ist es aber auch nicht ganz.
in beiden Fällen verschwindet das '\r'.Code: Alles auswählen
>>> swin="erewr \r\nafjdskl " >>> re.sub(r'\s*(\n|$)', r'\1', swin) 'erewr\nafjdskl' >>> re.sub(r'\s+$(?m)', '', swin) 'erewr\nafjdskl'
TUFKAB – the user formerly known as blackbird
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Noch ein Versuch: Zwar keine Regex, scheint aber das zu tun was Du willst:
Code: Alles auswählen
In [62]: s = "lala \t\r\ngaga\t \t"
In [63]: "".join([i.strip("\t ") for i in s.split(" ")])
Out[63]: 'lala\r\ngaga'
In [64]: s = "lala \t\ngaga\t \t"
In [65]: "".join([i.strip("\t ") for i in s.split(" ")])
Out[65]: 'lala\ngaga'
...und noch einer:
Gruss, Helmut
Code: Alles auswählen
regex = re.compile('\s*$',re.M)
s = "lala \t\r\ngaga\t \t"
regex.sub("",s,re.M)
# 'lala\ngaga'
s = "lala \t\ngaga\t \t"
regex.sub("",s,re.M)
# 'lala\ngaga'
s='hier und heute \t\t\n da und dort\t \r\nwo und warum \n\r'
regex.sub("",s,re.M)
# 'hier und heute\n da und dort\nwo und warum'