Zeichenkette nach zeichenkette identifizieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Ich habe ABBACBAB

Jetzt möchte ich alle Zeichen nach A identifizieren, also die Gruppe: BB, CB, B
Wie mache ich das?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Welche Zeichenketten-Methoden kennst Du, und welche könnte man hierfür verwenden?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Was wird denn gesucht? split ist nunmal die Lösung, wenn man Zeichenketten an bestimmten Zeichen aufspalten will.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist denn nun Dein Problem? Mit split hast Du doch eine Lösung?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Die Antwort wird nicht akzeptiert!
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Ich muss das pattern richtig ausfüllen, und dann richtig gruppieren! Es geht auch nicht pattern =r"ÂAA"
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

reges habe ich studiert, aber ich finde in den Standarddarstellungen nicht ein Muster, welches drei nacheinanderfolgende A in einem String ausschließen soll!
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

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)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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 "(!?…)".
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten