Hey,
ich bin noch sehr ungeübt mit regulären Ausdrücken. Kann mir jemand spontan sagen, wie ich festellen kann, ob ein String (3 Zeichen lang) Buchstaben von A bis Z außer G und P enthält?
Das wäre suuuuuper nett!
grüße
c
Hilfe: Regulärer Ausdruck gesucht!
Hallo!
Ganz spontan:
hth
Jan
Ganz spontan:
Code: Alles auswählen
import re
text = "ABC"
if re.search(r"^[A-FH-OQ-Z]{3}$",text):
print "ok"
Jan
-
- User
- Beiträge: 104
- Registriert: Sonntag 25. Mai 2003, 20:22
- Wohnort: Freiburg i.B.
- Kontaktdaten:
Ich hab auch ne Idee, aber da ich mich mit REs nicht auskenne, versuch ichs anders.
Das müsste auch gehen:
Das müsste auch gehen:
Code: Alles auswählen
import string
def Ersatz():
Vorrat = "abcdefhijklmnoqrstuvwxyz"
dat = file(Name_der_Datei, "r")
text = dat.read()
text = string.lower(text)
for x in text:
if x in Vorrat:
return 1
elif x not in Vorrat:
return 0
else:
print "Text ist leer"
Ersatz()
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Hi Jan,
danke für deinen vorschlag. ich habe aber das mal ausprobiert:
text = "APA"
dies sollte sollte eigentlich nicht funktionieren (P soll nicht dabei sein). mein test war aber leider positiv...
danke für deinen vorschlag. ich habe aber das mal ausprobiert:
text = "APA"
dies sollte sollte eigentlich nicht funktionieren (P soll nicht dabei sein). mein test war aber leider positiv...
Kann nicht sein. Großschreibung beachtet?Christina hat geschrieben:text = "APA"
dies sollte sollte eigentlich nicht funktionieren (P soll nicht dabei sein). mein test war aber leider positiv...
Jan
Also ich habe da jetzt eine kurze Lösung:
Jan: Vielen Dank für deinen Vorschlag!!!
Ciao
c
Code: Alles auswählen
text = "APA"
result = re.match('[A-FH-OQ-Z]{1,3}$', text);
Ciao
c
Damit akzeptierst Du aber auch Zeichenketten, die kürzer als 3 Zeichen sind.Christina hat geschrieben:Code: Alles auswählen
result = re.match('[A-FH-OQ-Z]{1,3}$', text);
Jan
Mein Vorschlag wäre:
Ist etwas durchschaubarer als die re.search-Methode und universelll einsetzbarer.
Um ehrlich zu sein hab ich das nur als kleine Möglichkeit angesehen, etwas Programmiererfahrung zu sammeln, aber da das Ergebnis ganz gut aussieht, "veröffentliche" ich es mal
Es scheint sogar zu funktionieren (mein erstes funktionierendes Prog - Juhu )
Code: Alles auswählen
text = "ABC"
forbidden =["G","P"]
def test(text, lang=3, verboten=forbidden ):
if len(text)==3:
for i in [1,2,3]:
if text[i]in verboten: return "verbotener Buchstabe"
return "richtig"
else: return "falsche Laenge"
print test(text)
Um ehrlich zu sein hab ich das nur als kleine Möglichkeit angesehen, etwas Programmiererfahrung zu sammeln, aber da das Ergebnis ganz gut aussieht, "veröffentliche" ich es mal
Es scheint sogar zu funktionieren (mein erstes funktionierendes Prog - Juhu )
Hast Du das getestet? Du greifst mit text[3] hinter den String. Das müsste ein IndexError: string index out of range zur Folge haben. Abgesehen davon erkennt Deine Funktion auch "&%$" als richtig.Kartoffel hat geschrieben:Es scheint sogar zu funktionieren (mein erstes funktionierendes Prog - Juhu )
Jan
Hallo!
Da offensichtlich Bedarf nach einer RE-freien Variante besteht (ohne Prüfung auf Länge):Und da soll noch einer behaupten, reguläre Ausdrücke seien schwer lesbar
Jan
Da offensichtlich Bedarf nach einer RE-freien Variante besteht (ohne Prüfung auf Länge):
Code: Alles auswählen
text = "ABC"
if not [0 for ch in text if ch not in "ABCDEFHIJKLMNOQRSTUVWXYZ"]:
print "ok"
Jan
Bei mir haben sich wohl 2 Fehler gegenseitig quasi ausgelöscht
(zumindest hat man sie nicht mehr so ohne weiteres entdeckt )
Hier mal eine überarbeitete und ausgiebig getestete Version:
Der müsste jetzt eigentlich funktionieren
(zumindest hat man sie nicht mehr so ohne weiteres entdeckt )
Hier mal eine überarbeitete und ausgiebig getestete Version:
Code: Alles auswählen
from string import ascii_uppercase
text = "ABC"
forbidden =["G","P"]
def test(text, lang=3, verboten=forbidden ):
try:
if len(text)==3:
for i in range(0,lang):
if type(text[i]) is not str: raise TypeError
if not text[i] in ascii_uppercase or text[i]in verboten: return "verbotener Buchstabe"
return "richtig"
else: return "falsche Laenge"
except TypeError:
return "falscher Typ"
print test(text)
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hallo,
habe mal nen wilden "einzeiler" gemacht
Gruß
Dookie
habe mal nen wilden "einzeiler" gemacht
Code: Alles auswählen
def charcheck(totest):
return len(totest) == 3 and min([x in reduce(lambda x,y: x + chr(y), range(ord("A"), ord("G")) + range(ord("H"), ord("P")) + range(ord("Q"), ord("Z")+ 1), "") for x in totest])
Gruß
Dookie
da hier jeder seinen Senf abgeben hat, will ich das auch noch mal tun
Code: Alles auswählen
f=lambda x:len(x)==3 and 'G' not in x and 'P' not in x
Zuletzt geändert von Milan am Dienstag 22. Juli 2003, 12:43, insgesamt 1-mal geändert.
-
- User
- Beiträge: 104
- Registriert: Sonntag 25. Mai 2003, 20:22
- Wohnort: Freiburg i.B.
- Kontaktdaten:
Ich hab noch ne Idee!
Code: Alles auswählen
from string import *
def such_hasso_such(text):
Vorrat = "abcdefhijklmnoqrstuvwxyz"
text = text.lower()
if len(text) == 3:
for i in text:
if i not in Vorrat:
erg = 1
else:
erg = 0
else:
erg = 0
return erg
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Noch 'ne Möglichkeit:
Jan
Code: Alles auswählen
Python 2.3b1 (#40, Apr 25 2003, 19:06:24) [MSC v.1200 32 bit (Intel)] on win3
Type "help", "copyright", "credits" or "license" for more information.
>>> import sets
>>> sets.Set("ASD").issubset(sets.Set("ABCDEFHIJKLMNOQRSTUVWXYZ"))
True
>>> sets.Set("DFG").issubset(sets.Set("ABCDEFHIJKLMNOQRSTUVWXYZ"))
False
>>>
Hallo!
http://www.python.org/doc/2.3b1/whatsnew/node2.html
Jan
Gibt es auch erst ab Version 2.3. Eine knappe Beschreibung von Sets gibt's hier:Milan hat geschrieben:hmmm... würde ich mir ja gerne mal näher anschauen, aber es gibt bei mir kein Modul sets. In der offizellen Modulliste auch nicht.
http://www.python.org/doc/2.3b1/whatsnew/node2.html
Jan