Analysieren Sie RegEx in Excel

533
gbi1977

Angenommen, ich habe eine Excel-Tabelle mit der folgenden Spalte:

A-345 Hallo

hola B-389

schön C-6231

was A-12287 wer

nur A-7819 C-45556

Wie Sie sehen, habe ich einen mit RegEx kombinierten Text, der aus A, B oder C, einem Bindestrich und einer Zahl mit bis zu 5-6 Ziffern besteht. Einige dieser Ausdrücke erscheinen mehrmals in einigen Zeilen.

Ich möchte dieses RegEx (das zwischen den Zeilen etwas variiert) in eine andere Spalte parsen. Wenn es in einer Zeile Multipile-Ausdrücke gibt (wie die fünfte Zeile in meinem Beispiel), möchte ich sie nach jedem Zeichen trennen, bei dem es sich nicht um den Bindestrich handelt (das Leerzeichen würde es tun).

Gibt es in Excel eine integrierte Funktion, die es mir erlaubt? Vielleicht ein VBA-Skript?

Ich habe diesen Thread gefunden, möchte aber erst sehen, ob ich es ohne externes Add-On oder ohne Software machen kann. Unterstützt dieses spezielle Add-In, was ich brauche?

0
Sehen Sie, wenn dies hilft: https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops Scott Craner vor 6 Jahren 1
Was ist Ihre erwartete Leistung? DavidPostill vor 6 Jahren 0
@DavidPostillieren Sie eine separate Spalte mit dem Regex (A-345, B-389 usw.) in jeder Zeile. Wenn es in einer Zeile Multipile-Ausdrücke gibt (wie in der fünften Zeile), möchte ich alle in dieser einzelnen Spalte enthalten, getrennt durch Leerzeichen oder durch ein Komma. gbi1977 vor 6 Jahren 0

1 Antwort auf die Frage

1
Scott Craner

Wenn Sie eine integrierte Funktion wünschen, können Sie diese Matrixformel verwenden:

=TEXTJOIN(" ",TRUE,IFERROR(--LEFT(TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",999)),ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))))*999,999)),FIND(" ",TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",999)),ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))))*999,999))&" ")-1),"")) 

Als Array-Formel muss sie beim Verlassen des Bearbeitungsmodus mit STRG-UMSCHALT-EINGABE anstelle von EINGABE bestätigt werden. Wenn es richtig gemacht wird, wird Excel {}die Formel verwenden.

Hinweis:

Dadurch wird die erste Zahlengruppierung nach jeder zurückgegeben -


TEXTJOIN () ist mit einem Abonnement für Office 365 Excel verfügbar. Wenn dies nicht der Fall ist, fügen Sie diesen Code einem an die Arbeitsmappe angefügten Modul hinzu und verwenden Sie die oben beschriebene Formel:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0  If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function