如何确定街道名称或城市是否需要空间?
问题:我希望能够确定街道名称或城市名称中是否需要空间。
原因在于用户习惯于将两个单词合并成一个单词。
防爆。 在数据库中,“贝尔花园”作为“贝尔加登”input。
他们的方式来确定何时用户做到这一点,并相应地添加空间?
您可以使用正则expression式, 这是一个正则expression式validationtesting。
并在下面的解释如何做到这一点。
代码和正则expression式进行了更新,到最后检查它们。
在Excel上启用正则expression式
- 打开Excel工作簿。
- Alt + F11打开VBA /macros窗口。
- 在工具然后引用添加引用正则expression式
- 并selectMicrosoft VBScript正则expression式5.5
- 插入一个新的模块(代码需要驻留在模块中,否则不能工作)。
- 在新插入的模块中,
码
-
添加下面的代码:
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})(?:([AZ][az]+\s*?)([Mc|O']*[AZ][az]+\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
名称并根据正则expression式添加空格。 只有2个大写字母的名字,除了Mc和O'
如果名字像ThIsNaMe
,输出将是Th Me
红色名称的代码颜色已经是正确的,绿色的代码有一些间距问题。
Ps:因为我是Regex新手,有优化空间。
更新编辑:
对于更复杂的正则expression式和超过2个大写字母的情况和数字,这里是正则expression式更新
码
颜色索引是Swapped,所以当颜色是红色时,意味着它被改变了。 因此,用户可以直观地validation这些变化。
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']*[AZ]{1}[az]+)|(?:[\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
结果
你不能这样做,你需要某种模式来实现自动化,但在你的情况下,不可能通过使用街道名称或城市名称来自动化“空间”。