นิพจน์ทั่วไปใช้สำหรับการจับคู่รูปแบบ
วิธีใช้ใน Excel ทำตามขั้นตอนเหล่านี้:
ขั้นตอนที่ 1 : เพิ่มการอ้างอิง VBA ใน "Microsoft VBScript Regular Expressions 5.5"
- เลือกแท็บ "นักพัฒนา" ( ฉันไม่มีแท็บนี้ฉันจะทำอย่างไร )
- เลือกไอคอน "Visual Basic" จากส่วน 'Code'
- ในหน้าต่าง "Microsoft Visual Basic สำหรับแอปพลิเคชัน" เลือก "เครื่องมือ" จากเมนูด้านบน
- เลือก "การอ้างอิง"
- ทำเครื่องหมายที่ช่องถัดจาก "Microsoft VBScript Regular Expressions 5.5" เพื่อรวมไว้ในสมุดงานของคุณ
- คลิก "ตกลง"
ขั้นตอนที่ 2 : กำหนดรูปแบบของคุณ
คำจำกัดความพื้นฐาน:
-
พิสัย.
- เช่น
a-z
จับคู่ตัวอักษรพิมพ์เล็กจาก a ถึง z
- เช่น
0-5
จับคู่หมายเลขใด ๆ จาก 0 ถึง 5
[]
จับคู่หนึ่งในวัตถุภายในวงเล็บเหล่านี้
- เช่น
[a]
ตรงกับตัวอักษร
- เช่น
[abc]
จับคู่อักษรเดี่ยวซึ่งอาจเป็น a, b หรือ c
- เช่น
[a-z]
จับคู่อักษรตัวพิมพ์เล็กใด ๆ ของตัวอักษร
()
จับคู่กลุ่มที่แตกต่างกันเพื่อวัตถุประสงค์ในการคืนสินค้า ดูตัวอย่างด้านล่าง
{}
ตัวคูณสำหรับสำเนาซ้ำของรูปแบบที่กำหนดไว้ก่อนหน้า
- เช่น
[a]{2}
จับคู่อักษรตัวพิมพ์เล็กสองตัวติดต่อกัน a:aa
- เช่น
[a]{1,3}
ตรงกับอย่างน้อยหนึ่งถึงสามล่างตัวอักษรกรณีa
, aa
,aaa
+
จับคู่รูปแบบที่กำหนดไว้ก่อนหน้าอย่างน้อยหนึ่งรูปแบบขึ้นไป
- เช่น
a+
จะตรงกับการติดต่อกันของa
, aa
, aaa
และอื่น ๆ
?
จับคู่ศูนย์หรือหนึ่งในรูปแบบที่กำหนดไว้ก่อนหน้า
- เช่นรูปแบบอาจมีหรือไม่มีอยู่ แต่สามารถจับคู่ได้เพียงครั้งเดียวเท่านั้น
- เช่น
[a-z]?
จับคู่สตริงว่างหรืออักษรตัวพิมพ์เล็กใด ๆ
*
จับคู่รูปแบบที่กำหนดไว้ก่อนหน้าศูนย์หรือมากกว่านั้น - เช่นสัญลักษณ์แทนสำหรับรูปแบบที่อาจมีหรือไม่มีอยู่ - เช่น[a-z]*
จับคู่สตริงว่างหรือสตริงตัวอักษรตัวพิมพ์เล็ก
.
ตรงกับตัวละครใด ๆ ยกเว้นการขึ้นบรรทัดใหม่ \n
- เช่น
a.
จับคู่สตริงอักขระสองตัวที่ขึ้นต้นด้วย a และลงท้ายด้วยอะไรก็ได้ยกเว้น\n
|
หรือผู้ประกอบการ
- เช่น
a|b
หมายถึงอย่างใดอย่างหนึ่งa
หรือb
สามารถจับคู่
- เช่น
red|white|orange
ตรงกับหนึ่งในสีทั้งหมด
^
ไม่ใช่ผู้ประกอบการ
[^0-9]
อักขระเช่นต้องไม่มีตัวเลข
- เช่น
[^aA]
ตัวอักษรต้องไม่เป็นตัวพิมพ์เล็กa
หรือตัวพิมพ์ใหญ่A
\
หนีอักขระพิเศษที่ตามมา (แทนที่เหนือพฤติกรรม)
- เช่น
\.
, \\
, \(
, \?
, \$
,\^
รูปแบบการยึด:
^
การจับคู่จะต้องเกิดขึ้นที่จุดเริ่มต้นของสตริง
- เช่น
^a
ตัวอักษรตัวแรกต้องเป็นตัวอักษรพิมพ์เล็กa
- เช่น
^[0-9]
อักขระตัวแรกต้องเป็นตัวเลข
$
การจับคู่จะต้องเกิดขึ้นที่ส่วนท้ายของสตริง
- เช่น
a$
ตัวอักษรตัวสุดท้ายจะต้องเป็นตัวอักษรพิมพ์เล็กa
ตารางที่สำคัญกว่า:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
ตัวย่อที่กำหนดไว้ล่วงหน้า:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
ตัวอย่างที่ 1 : เรียกใช้เป็นมาโคร
ตัวอย่างแมโครต่อไปนี้จะดูค่าในเซลล์A1
เพื่อดูว่าอักขระ 1 หรือ 2 ตัวแรกเป็นตัวเลขหรือไม่ ถ้าเป็นเช่นนั้นจะถูกลบออกและส่วนที่เหลือของสตริงจะปรากฏขึ้น ถ้าไม่เช่นนั้นจะมีกล่องปรากฏขึ้นเพื่อบอกคุณว่าไม่พบข้อมูลที่ตรงกัน A1
ค่าเซลล์ของ12abc
จะคืนabc
ค่าของ1abc
จะกลับมาabc
มูลค่าของabc123
จะกลับมา "ไม่ตรงกัน" เพราะตัวเลขไม่ได้อยู่ที่จุดเริ่มต้นของสตริง
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
ตัวอย่างที่ 2 : เรียกใช้เป็นฟังก์ชันในเซลล์
ตัวอย่างนี้เหมือนกับตัวอย่างที่ 1 แต่เป็นการตั้งค่าให้เรียกใช้เป็นฟังก์ชันในเซลล์ วิธีใช้ให้เปลี่ยนรหัสเป็น:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
วางสายของคุณ ( "12abc") A1
ในเซลล์ ป้อนสูตรนี้=simpleCellRegex(A1)
ในเซลล์B1
และผลลัพธ์จะเป็น "abc"
ตัวอย่างที่ 3 : วนรอบช่วง
ตัวอย่างนี้เหมือนกับตัวอย่างที่ 1 แต่วนลูปผ่านช่วงของเซลล์
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
ตัวอย่างที่ 4 : แยกรูปแบบที่แตกต่าง
ตัวอย่างนี้วนลูปผ่านช่วง ( A1
, A2
& & A3
) และค้นหาสตริงที่ขึ้นต้นด้วยตัวเลขสามหลักตามด้วยอักขระอัลฟ่าหนึ่งตัวและตามด้วยตัวเลข 4 หลัก ()
แยกเอาท์พุทออกจากกันตรงรูปแบบการเข้าสู่เซลล์ที่อยู่ติดกันโดยใช้ หมายถึงรูปแบบครั้งแรกที่จับคู่ภายในชุดแรกของ$1
()
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
ผล:
ตัวอย่างรูปแบบเพิ่มเติม
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit