Bỏ ký tự đầu và cuối của chuỗi

Liên hệ QC
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:

"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"

Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289

Chết anh Cò rồi. Nhậu xong phải giải bài này nha
 
Chết anh Cò rồi. Nhậu xong phải giải bài này nha
Bi giờ mới về nhà & đang on- lai
Híc, tưng quá xá cỡ, hiểu được đề bài của bạn siwtom thì mình.....chết liền
Nhưng, không có việc gì khó, chỉ sợ việc đó nó....khó thật ==> mình bị "tèo"
Híc ....3 lần, Ba Tê đâu mất tiêu rồi, hổng vô cứu bồ
 
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:

"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"

Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289
Lại một cách giải "xi-ma-chao" nữa đây:
Mã:
Public Function TachNua(Cll As Range) As String
    Dim Re As Object, ReTim As Object, A, Kq, B
    Set Re = CreateObject("vbscript.regexp")
        With Re
            .Global = True
            .Pattern = "\d+"
        End With
            Set ReTim = Re.Execute(Cll)
                For Each A In ReTim
                     With Re
                        .Global = True
                        .Pattern = "(^\d+)\1"
                    End With
                        Set B = Re.Execute(A.Value)
                        If B.Count Then Kq = Kq & ", " & A.Value
                Next A
     TachNua = Right(Kq, Len(Kq) - 2)
End Function
Mày mò học cái này thấy cũng...hay hay nhưng chưa viết gọn gàng được vì chưa nắm bắt được hết cái "quỷ quái" này
Híc
Hình như pattern này viết một lần cũng được thì phải. Thôi cứ để đấy tính sau
 

File đính kèm

  • TachSo.xls
    29.5 KB · Đọc: 2
Thêm điều kiện chút: "Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà trong 3 chữ số đầu phải có ít nhất 1 chữ số 2"
Vd. chuỗi: "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
Kết quả: 2, 12234, 234567, 11289, 00289
-------------
VBA, công thức đều được

Mã:
Sub test()
Dim re As Object, match As Object, s As String, tmp As String
    s = "2abc+_*/?12234def1342gh234567 11289 5678 opq000223rst00289 xyz"
    Set re = CreateObject("vbscript.regexp")
    With re
        .Global = True
        .Pattern = "(?=(\D|^)\d{0,2}2)\1(\d+)"
    End With
    For Each match In re.Execute(s)
        tmp = tmp & match.SubMatches.Item(1) & ", "
    Next match
    MsgBox Left(tmp, Len(tmp) - 2)
End Sub
 
Lần chỉnh sửa cuối:
Vậy thì chúng ta kiên nhẫn đợi cho tới khi cuộc nhậu tàn và cái đầu bớt nhức đây.
À, dùng Instr hả. Thế thì ta phát biểu lại bài:
"Cho một chuỗi ký tự gồm chữ số và không chữ số (dấu ".", "," không là các dấu thập phân). Hãy tách ra các chuỗi có dạng số tự nhiên mà đoạn đầu - độ dài tùy ý - có dạng AA, trong đó A là 1 chuỗi chữ số"
Vd. chuỗi: "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
Kết quả: 1313, 11119, 000223, 00289

Mã:
Sub test1()
Dim re As Object, match As Object, s As String, tmp As String
    s = "2abc+_*/?12234def1313gh234567 11119 5678 opq000223rst00289 xyz"
    Set re = CreateObject("vbscript.regexp")
    With re
        .Global = True
        .Pattern = "(?=(\D|^)(\d+)\2)\1(\d+)"
    End With
    For Each match In re.Execute(s)
        tmp = tmp & match.SubMatches.Item(2) & ", "
    Next match
    MsgBox Left(tmp, Len(tmp) - 2)
End Sub
 
Lần chỉnh sửa cuối:
Đọc code của anh Siwtom xong muốn nghỉ học VBA luôn vì thấy rằng cả đời này chắc không tài nào làm được như vậy.
Nhưng nghĩ lại thì học tiếp vì thực tế ít khi nào gặp dạng phức tạp thế này. Mà nếu có gặp thì làm ngơ cho chắc ăn
Tạm thời cứ copy code và phần giải thích về lưu trong máy cái đã.
 
Đọc code của anh Siwtom xong muốn nghỉ học VBA luôn vì thấy rằng cả đời này chắc không tài nào làm được như vậy.
Nhưng nghĩ lại thì học tiếp vì thực tế ít khi nào gặp dạng phức tạp thế này. Mà nếu có gặp thì làm ngơ cho chắc ăn
Tạm thời cứ copy code và phần giải thích về lưu trong máy cái đã.

Tất cả chỉ là kiến thức như mọi kiến thức trong nhà trường thôi mà. Nếu ai có nhu cầu thì "công cụ" đã có chỉ việc dùng.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom