问题:我希望能够确定街道名称或城市名称中是否需要空格。
原因是用户习惯将两个单词合二为一。
实施例。在数据库中,"贝尔花园"输入为" BellGardens"。
他们是否可以确定用户何时执行此操作并相应地添加空间?
答案 0 :(得分:2)
您可以使用正则表达式,here是正则表达式验证测试。
以下是如何做的解释。
代码和正则表达式已更新,请到最后检查它们。
添加以下代码:
Sub test_regex()
Dim str As String
Dim objMatches As Object
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
Dim i As Long
lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'To check the name
For i = 1 To lastrow
str = Trim(CStr(Cells(i, 1)))
Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp
objRegExp.Pattern = "^(?![ ])(?!.*[ ]{1})(?:([A-Z][a-z]+\s*?)([Mc|O']*[A-Z][a-z]+\s*?)*(?!.*[ ])$)+$"
objRegExp.Global = True
Set objMatches = objRegExp.Execute(str)
If objMatches.Count <> 0 Then
ws.Cells(i, 2) = objRegExp.Replace(str, "$1" & " " & "$2")
ws.Cells(i, 2).Interior.ColorIndex = 4
Else
ws.Cells(i, 2).Interior.ColorIndex = 3
ws.Cells(i, 2) = ws.Cells(i, 1)
End If
Next i
End Sub
此代码将Trim
名称并根据Regex添加空格。仅限2个大写名称,Mc和O'除外
如果名称与ThIsNaMe
类似,则输出将为Th Me
红色名称中的代码颜色已经正确,绿色代码颜色有一些间距问题。
Ps。:由于我是Regex的新手,因此有优化空间。
对于更复杂的正则表达式以及超过2个大写字母案例和数字,这里是Regex Update
颜色索引是Swapped,因此当颜色为红色时,意味着它已被更改。因此,用户可以直观地验证更改。
Sub test_regex()
Dim str As String, final_str As String
Dim objMatches As Object
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
Dim i As Long, k As Long, lastrow As Long
lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'To check the name
For i = 1 To lastrow
str = Trim(CStr(Cells(i, 1)))
Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp
objRegExp.Pattern = "(?!.*[ ]{1})(?:(?:[Mc|O']*[A-Z]{1}[a-z]+)|(?:[\d]+[rd|th|st|nd]*))"
objRegExp.Global = True
Set objMatches = objRegExp.Execute(str)
If objMatches.Count > 1 Then
final_str = ""
For Each m In objMatches
final_str = final_str & " " & CStr(m.Value)
Next
ws.Cells(i, 2).Interior.ColorIndex = 3
ws.Cells(i, 2) = Trim(final_str)
Else
ws.Cells(i, 2).Interior.ColorIndex = 4
ws.Cells(i, 2) = ws.Cells(i, 1)
End If
Next i
End Sub
答案 1 :(得分:0)
你不能这样做,你需要某种模式来自动化,但在你的情况下,不能仅仅通过使用街道名称或城市名称来自动化“空间”。