我需要一个RegEx模式,它将由客户端发送,其中起始字符将是字母数字,此起始字符串的长度将由此字符串后面的数字定义。接下来是一个特殊字符,它始终是一个字符。接下来是一个可变长度的字母数字字符串。
我最接近下面的String和格式。
[A-Za-z0-9]{4}-[A-Za-z0-9]{5} - RegEx Input String
[A-Za-z0-9]{2}#[A-Za-z0-9]{6} - RegEx Input String
[0-9]{3}#[0-9]{5} - RegEx Input String
[a-z]{5}#[a-z]{5} - RegEx Input String
[A-Z]{4}#[a-z]{4} - RegEx Input String
[\w]{\d{1,1}}(\S{1,1})[\w]{\d{1,1}} - RegEx Format
上述模式和格式是否正确?
我们可以根据所需的RegEx格式验证RegEx输入字符串吗?
这是一个Web服务,其输入为[A-Za-z0-9] {4} - [A-Za-z0-9] {5}。我这里需要两件事。首先,如何验证此输入以查看它是否与我想要的格式和继续进行匹配。格式是我上面提到的RegEx格式。
答案 0 :(得分:0)
此正则表达式应与您感兴趣的正则表达式子集匹配:
Option Explicit
Sub CopyRows()
Dim Cl As Range
Dim str As String
Dim RowUpdCrnt As Long
str = "WRK.*" 'string to look for
Sheets("Feb").Range("B5:B81").Value = ""
RowUpdCrnt = 5
' In my test data, the "WRK."s are in column AN. This For-Each only selects column AN.
' I assume all my "WRK."s are in a single column. Replace "B" by the appropriate
' column letter for your data.
With Sheets("Jan")
' loop until last row with data in Column AN (and not the entire column) to save time
For Each Cl In .Range("AN1:AN" & .Cells(.Rows.Count, "AN").End(xlUp).Row)
If Cl.Value Like str And Sheets("Feb").Range(Cl.Address).Value <> "" Then
'if the cell contains the correct value copy it to next empty row on sheet 2 & delete the row
If Not IsError(Application.Vlookup(.Range("B" & Cl.Row).Value, Sheets("Master").Range("H7:H200"), 1, 0)) Then ' <-- verify the VLookup was successful
Sheets("Feb").Range("B" & RowUpdCrnt).Value = Application.Vlookup(.Range("B" & Cl.Row).Value, Sheets("Master").Range("H7:H200"), 1, 0)
RowUpdCrnt = RowUpdCrnt + 1
End If
End If
Next Cl
End With
Application.CutCopyMode = False
End Sub
让我们分解一下:
\[(?:[a-zA-Z0-9](?:-[a-zA-Z0-9])?)*\](?:\{\d\})?\S\[(?:[a-zA-Z0-9](?:-[a-zA-Z0-9])?)*\](?:\{\d\})?
(您可能希望将其更改为更具体的字符,或者包含一些空格)\S
。请注意,这不会接受多位数长度,因此您可能希望将(?:\{\d\})?
更改为\d
,也不要将更具体的\d+
范围量词更改。{m,n}
当无界群组不匹配时[a-zA-Z0-9](?:-[a-zA-Z0-9])?
后跟另一个字符:-
当无限组匹配时