Seite 1 von 1

Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 12:27
von Brando
Ich habe ABBACBAB

Jetzt möchte ich alle Zeichen nach A identifizieren, also die Gruppe: BB, CB, B
Wie mache ich das?

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 12:40
von Sirius3
Welche Zeichenketten-Methoden kennst Du, und welche könnte man hierfür verwenden?

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 13:13
von Brando
Also ich habe das mal so gemacht:

Code: Alles auswählen

def result():
    s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
     
    result = s.split("AAA")
    # compete the pattern below
    # pattern = 
    # for item in re.finditer(pattern, s):
      # identify the group number below.
   #   result.append(item.group())
      
    return result
Aber das ist nicht was gesucht wird in:

Code: Alles auswählen

def result():
    s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
     
    # compete the pattern below
     pattern = 
    for item in re.finditer(pattern, s):
      # identify the group number below.
       result.append(item.group())
      
    return result

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 13:19
von Sirius3
Was wird denn gesucht? split ist nunmal die Lösung, wenn man Zeichenketten an bestimmten Zeichen aufspalten will.

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 13:53
von Brando
Folgendes funktioniert nicht:

Code: Alles auswählen

def result():
    s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
     
    result = [] # s.split("AAA")
    # compete the pattern below
    pattern = r"[AAA]"
    for item in re.finditer(pattern, s):
      # identify the group number below.
      result.append(item.group())
      
    return result

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 13:57
von Sirius3
Was ist denn nun Dein Problem? Mit split hast Du doch eine Lösung?

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 14:00
von Brando
Die Antwort wird nicht akzeptiert!

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 14:06
von Sirius3
Was bedeutet "die Antwort wird nicht akzeptiert?" Wer soll denn die Antwort akzeptieren? Was ist denn Dein wirkliches Problem, das Du lösen möchtest? Was ist die Fehlermeldung die Du bekommst? Wie weicht das Ergebnis, das Du bekommst, von dem ab, das Du erwartest?

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 14:30
von Brando
Ich muss das pattern richtig ausfüllen, und dann richtig gruppieren! Es geht auch nicht pattern =r"ÂAA"

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 15:09
von __blackjack__
@Brando: Noch mal: wie soll denn das Ergebnis aussehen? Denn das wissen wir nicht wirklich. Du hast das im ersten Beitrag beschrieben für "A" und nun hast Du plötzlich Code in dem Du "AAA" schreibst. Was wäre *da* das Ergebnis und wie lautet überhaupt die Aufgabenstellung?

Der reguläre Ausdruck "[AAA]" macht wenig Sinn, denn das ist das gleiche wie "[A]" und das ist das gleiche wie "A". Das sollte Dir eigentlich klar sein, wenn Du Dich mit regulären Ausdrücken auseinandergesetzt hast. Hast Du das? Was sind da die Quellen? Hast Du die Dokumentation zum `re`-Modul durchgearbeitet? Es gibt in der Python-Dokumentation auch ein HOWTO zu regulären Ausdrücken — hast Du das auch durchgearbeitet? Hast Du mal interaktiv mit so etwas wie https://regex101.com/ gearbeitet? Das kann hilfreich beim Entwickeln von regulären Ausdrücken sein. Es gibt da auch noch andere Webseiten und auch Desktopprogramme für so etwas.

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 15:17
von Brando
reges habe ich studiert, aber ich finde in den Standarddarstellungen nicht ein Muster, welches drei nacheinanderfolgende A in einem String ausschließen soll!

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 16:50
von __blackjack__
@Brando: Jetzt sollen drei As plötzlich *ausgeschlossen* werden — das hat ja noch weniger mit den beiden Varianten aus den Beiträgen bisher zu tun. Man kann nicht helfen wenn Du nicht mit der tatsächlichen Problemstellung heraus rückst. Vollständig und von Dir aus, ohne das man immer wieder nachfragen muss. Und dann doch wieder nicht weiss, ob Du jetzt das tatsächliche, vollständige Problem präsentiert hast.

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 17:03
von Brando
Das Problem ist dadurch charakterisiert, dass alle Zeichen vor drei AAA ausgegeben werden sollen. Folgender Ansatz funktioniert auch nicht.

Code: Alles auswählen

import re
s = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
     
result = [] # s.split("AAA")
    # compete the pattern below
pattern =  r"((?!([A]{3})))"
for item in re.finditer(pattern, s):
      # identify the group number below.
    result.append(item.group(0))
print (result)

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 18:09
von rogerb
@Brando,
Die Antwort wird nicht akzeptiert!
Wenn du versuchst irgend so eine online coding challenge zu lösen, dann verlink sie doch einfach hier.
Dann kann man dir auch gezielt helfen.

Re: Zeichenkette nach zeichenkette identifizieren

Verfasst: Samstag 31. Juli 2021, 18:42
von __blackjack__
@Brando: Das einfachste scheint mir da immer noch die `split()`-Methode auf Zeichenketten zu sein. Falls es `re` sein muss, kann man das im Grunde genau so wie Du es im Satz schreibst als regex ausdrücken: Alle Zeichen vor drei "A". Und das ist auch ein recht einfacher Ausdruck, ohne Konstrukte wie "(!?…)".