Ich habe eine Regex, von der ich dachte, dass sie bis jetzt richtig funktioniert. Ich muss einen optionalen Charakter finden. Es kann da sein oder nicht.
Hier sind zwei Zeichenfolgen. Die obere Zeichenfolge stimmt überein, die untere nicht. Das Fehlen eines einzelnen Buchstabens in der unteren Zeichenfolge führt zum Fehlschlagen.
Ich möchte den einzelnen Buchstaben nach den ersten 5 Ziffern erhalten, wenn er vorhanden ist, und wenn nicht, den Rest der Zeichenfolge weiter abrufen. Dieser Brief kann sein A-Z
.
Wenn ich ([A-Z]{1}) +.*? +
aus der Regex entferne, passt es zu allem, was ich brauche, außer dem Buchstaben, aber es ist irgendwie wichtig.
20000 K Q511195DREWBT E00078748521
30000 K601220PLOPOH Z00054878524
Hier ist der reguläre Ausdruck, den ich verwende.
/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
Sie können den einzelnen Buchstaben optional machen, indem Sie ein Nachher hinzufügen
?
als:Der Quantifizierer
{1}
ist redundant, sodass Sie ihn löschen können.quelle
Sie müssen den einzelnen Buchstaben auch als optional markieren:
oder machen Sie das ganze Teil optional
quelle
Sie können auch einen einfacheren Regex verwenden, der für Ihren Fall entwickelt wurde, z. B.
(.*)\/(([^\?\n\r])*)
wo$2
Sie möchten.quelle