Seite 1 von 1

regular expression problem

Verfasst: Montag 23. Mai 2011, 13:22
von mit
Hi,
Wie ist es moeglich SA01m in SA01 mit regular expression zu erstetzen?

Code: Alles auswählen

import re

l = ['m_SA01m_v.txt', 'm_SA04m_v.txt', 'm_SA19m_v.txt']
for i in l:
	print i.replace('simple', 'short')
Um die folgende Loesung zu erhalten:
l = ['m_SA01_v.txt', 'm_SA04_v.txt', 'm_SA19_v.txt']

Vielen Dank

Re: regular expression problem

Verfasst: Montag 23. Mai 2011, 13:30
von Hyperion
Ich würds mit `re.sub()` angehen:

Code: Alles auswählen

In [9]: re.sub(r"(m_SA\d\d)m(_v)", r"\1\2","m_SA01m_v.txt")
Out[9]: 'm_SA01_v.txt'

Re: regular expression problem

Verfasst: Montag 23. Mai 2011, 13:33
von Leonidas

Code: Alles auswählen

p = re.compile('([A-Z]{2}\d{2})m')
l = [p.sub('\\1', e) for e in l]
Hyperion: du brauchst bei ``sub`` nicht noch weitere Gruppen zu definieren, weil das was nicht gematcht wird, wird sowieso unverändert übernommen. Und ich finds sinnvoller die Regex zu kompilieren, wenn man sie mehrfach ausführen will.

Re: regular expression problem

Verfasst: Dienstag 24. Mai 2011, 11:09
von mit
Danke!

Re: regular expression problem

Verfasst: Dienstag 24. Mai 2011, 12:06
von Hyperion
Leonidas hat geschrieben: Hyperion: du brauchst bei ``sub`` nicht noch weitere Gruppen zu definieren, weil das was nicht gematcht wird, wird sowieso unverändert übernommen.
Danke, das war mir nicht klar. Wieder was gelernt :-)
Leonidas hat geschrieben: Und ich finds sinnvoller die Regex zu kompilieren, wenn man sie mehrfach ausführen will.
Sicher, ich dachte das überlasse ich mal dem OP :-D

Re: regular expression problem

Verfasst: Mittwoch 25. Mai 2011, 14:16
von mit
Ich have folgende Scala RegExp:

Code: Alles auswählen

scala> val c1reg = """.*%s=(\w)=(\d+);.*""".format('J').r 
c1reg: scala.util.matching.Regex = .*J=(\w)=(\d+);.*
scala> val c1reg(c1_b_type, c1_b_count) = "A=X=1;J=A=3;"
c1_b_type: String = A
c1_b_count: String = 3
Wie koennte man diese in Python konventieren?

Vielen Dank im Voraus.

Re: regular expression problem

Verfasst: Mittwoch 25. Mai 2011, 15:19
von Leonidas
Die braucht man meines Erachtens nicht konvertieren, Pythons ``re``-Modul müsste die auch einfach verarbeiten können.

Re: regular expression problem

Verfasst: Mittwoch 25. Mai 2011, 16:04
von sma

Code: Alles auswählen

import re
for t, c in re.findall(r"J=(\w+)=(\d+);", "A=X=1;J=A=4;"):
    print t, c
Stefan

Re: regular expression problem

Verfasst: Sonntag 29. Mai 2011, 10:58
von mit
Danke

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:03
von mit

Code: Alles auswählen

>>> a = 'xyzfffd'
>>> 'x' in a
True
>>> 'xf' in a
False
Wie kann man testen (vielleicht mit regular expression) ob x oder/und f vorhanden ist?

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:05
von Liffi
mit hat geschrieben:

Code: Alles auswählen

>>> a = 'xyzfffd'
>>> 'x' in a
True
>>> 'xf' in a
False
Wie kann man testen (vielleicht mit regular expression) ob x oder/und f vorhanden ist?
Das ginge auch ohne regex mit 'or' und 'and'.

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:09
von EyDu
Oder allgemeiner mit Mengen.

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:40
von snafu

Code: Alles auswählen

if set('xf') & set(a):
    # a enthält x, f oder x und f

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:47
von BlackJack
``set('fx').issubset(a)`` ist vielleicht etwas lesbarer und es wird kein unnötiges Ergebnis-`set` erstellt.

Re: regular expression problem

Verfasst: Mittwoch 1. Juni 2011, 13:51
von snafu
Wenn schon wäre es `set.intersection()`, denn der OP möchte ja auch ein `True` erhalten, wenn `x` *oder* `f` vorhanden ist. Zumindest habe ich ihn so verstanden.