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

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