Parse RegEx di Excel


0

Misalkan saya memiliki beberapa lembar bentang Excel dengan kolom berikut:

A-345 halo

hola B-389

bagus C-6231

apa A-12287 siapa

hanya A-7819 C-45556

Seperti yang Anda lihat - Saya memiliki teks yang dikombinasikan dengan beberapa RegEx terdiri dari A, B atau C, tanda hubung dan beberapa angka hingga 5-6 digit. Beberapa ungkapan ini muncul lebih dari satu kali dalam beberapa baris.

Saya ingin menguraikan RegEx ini (yang agak bervariasi antar baris) ke kolom lain. Jika ada ekspresi multipile dalam beberapa baris (seperti baris ke-5 dalam contoh saya), maka saya ingin memisahkannya dengan karakter apa pun yang bukan tanda hubung (spasi akan melakukannya).

Apakah ada fungsi bawaan di Excel yang memungkinkan saya melakukannya? Mungkin beberapa skrip VBA?

saya menemukan utas ini , tetapi saya ingin melihat dulu apakah saya dapat melakukannya tanpa add-on eksternal atau perangkat lunak. Apakah tambahan khusus ini mendukung apa yang saya butuhkan?



Apa output yang Anda harapkan?
DavidPostill

@ Davidvidepost kolom terpisah dengan regex (A-345, B-389, dll) di setiap baris. jika ada ekspresi banyak dalam satu baris (seperti baris ke-5 yang diberikan) maka saya ingin memiliki semuanya di kolom tunggal ini, dipisahkan oleh spasi, atau koma.
gbi1977

Jawaban:


1

Jika Anda menginginkan fungsi bawaan, Anda bisa melakukan rumus array ini:

=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),""))

Menjadi formula array itu perlu dikonfirmasi dengan Ctrl-Shift-Enter bukannya Enter ketika Keluar dari mode edit. Jika dilakukan dengan benar maka Excel akan dimasukkan {} sekitar formula.

catatan:

Ini akan mengembalikan pengelompokan angka pertama setelah masing-masing -

enter image description here


TEXTJOIN () tersedia dengan berlangganan Office 365 Excel. Jika Anda tidak memilikinya, tambahkan kode ini ke modul yang dilampirkan ke buku kerja dan gunakan rumus seperti yang dijelaskan di atas:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.