WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Regexp für spitze Klammern in einem String

 

regexpGast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2013, 11:46     Titel: Regexp für spitze Klammern in einem String
  Antworten mit Zitat      
Hallo, ich habe ein problem mit einer regexp das ich nicht gelöst bekomme. ich hätte gerne im meinem ergebnis nur die spitzen klammern welche in einem string vorkommen.

das hier ist mein Beispiel und Test String
Code:

str = 'foo "ddd" foobar "<unknown>" barfoo <tag> "ccc';
 


die zeichen die ich nun suche und dann in meinem ergebnis erwarte sind: < und > also das Zeichen an der Position 19 und 27

was ich nach 100 verschiedenen regexp varianten gut kann ist die strings raus finden mit

Code:

>> match = regexp(strTmp, '".*?"', 'match')

match =

    '"ddd"'    '"<unknown>"'
 


aber wie bekomme ich nur die Position von den spitzen klammern und nur diese in meinem ergebnis ...

ich hoffe das sich jemand findet der mir weiterhelfen kann

danke


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.01.2013, 19:02     Titel: Re: Regexp für spitze Klammern in einem String
  Antworten mit Zitat      
Hallo regexpGast,

Meinst Du mit "welche in einem string vorkommen" die Buchstaben, die in Double-Quotes eingeschlossen sind?

Ich finde die übliche Groß/Klein-Schreibung besser lesbar. Wenn man in einem Forum auf die Mithilfe anderer hofft, ist es eine gute Idee, die Frage so leicht lesbar und verständlich wie möglich zu formulieren. Falls Du die Frage auf einer Handy-Tastatur tippst oder die Shift-Taste defekt ist, hilft es, dies einfach zu erwähnen.

Muss es unbedingt regexp sein? Das Suchen per STRFIND wäre vielleicht einfacher.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
regexpGast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2013, 10:48     Titel:
  Antworten mit Zitat      
Hallo Jan S,

Zitat:

Meinst Du mit "welche in einem string vorkommen" die Buchstaben, die in Double-Quotes eingeschlossen sind?

Das kann ich mit nein beantworten. Ich versuche dir es anhand eines weiteren regulären Ausdrucks zu erläutern, welcher als Ergebnis alles zurückliefert was zwischen zwei Double-Quotes eingeschlossen ist, aber nicht dem entspricht von was ich rede:

Code:

strTmp = 'foo "ddd" foobar "<unknown>" barfoo <tag> "ccc';

>> match = regexp(strTmp, '(?<=").*?(?=")', 'match')

match =

    'ddd'    ' foobar '    '<unknown>'    ' barfoo <tag> '
 


Wenn ich von einem String rede meine ich genau das was folgender regulärer Ausdruck beschreibt:
Code:

>> match = regexp(strTmp, '".*?"', 'match')

match =

    '"ddd"'    '"<unknown>"'
 

Tut mir leid wenn ich es nicht schaffe mich genauer oder besser ausdrücken aber was Besseres als es formal zu beschreiben kenne ich leider nicht.

Ich muss dich enttäuschen leider ist die Shift-Taste(n) nicht kaputt und es war auch keine Handy-Tastatur, es war einfach eine Unachtsamkeit und Unwissenheit über die deutsche Sprache. Ich hoffe dies ist zu verzeihen.

Gruß
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.02.2013, 12:34     Titel:
  Antworten mit Zitat      
Hallo regexpGast,

Jetzt have ich das Problem fast verstanden.
Was möchtest Du als Ausgabe für diesen String:
Code:
S = 'aaa "<asd>" bbb "<bsd>csd" ccc "e<f>g"'


Verschiedene Lösungsvorschläge, je nachdem, was Du möchtest:
Code:
% Das ist noch nicht genau genug:
index_lt = strfind(S, '"<');
index_gt = strfind(S, '>"');
% Fails for: '>"   "<'

% Mask character outside the "strings":
notQuoted = (rem(cumsum(S = '"'), 2) == 0); % quote - double quote - quote !!!
S(notQuoted) = ' ';
% Und jetzt:
index_lt = strfind(S, '"<');
index_gt = strfind(S, '>"');
% Oder einfach nach > und < suchen falls " nicht direkt anschließen muss?

Ja, REGEXP wäre viel witziger.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2013, 17:58     Titel:
  Antworten mit Zitat      
Hallo regexpGast,

können die < und > irgendwo innerhalb "..." vorkommen, oder sollen sie nur direkt
hinter bzw. vor den Anführungszeichen stehen?
Je nachdem bieten sich folgende simple Ausdrücke an:
Code:

[index_lt,index_gt]=regexp(str,'(?<=^([^"]|"[^"]*")*"[^"]*)<[^"]*>','start','end');
[index_lt,index_gt]=regexp(str,'(?<=^([^"]|"[^"]*")*")<[^"]*>(?=")','start','end');
 


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
regexpGast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2013, 09:33     Titel:
  Antworten mit Zitat      
Hallo zusammen, vielen Dank für eure Hilfe, ich habe mein Problem mit eurer Hilfe gelöst.

Hier ist dass wo von ich geredet habe Wink :
Code:

strTmp = 'foo "ddd" foobar "<unknown>" barfoo = "dfgsd < sdfasdfa " <tag> "ccc';

match = regexp(strTmp,'(?<=^([^"]|"[^"]*")*"[^"]*)(<|>)', 'match')

match =

    '<'    '>'    '<'
 


Vielen Dank!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.