Sql 如何确定街道名称或城市中是否需要空格?
问题:我希望能够确定街道名称或城市名称中是否需要空格 原因是用户习惯于将两个词组合成一个词 例如,在数据库中,“贝尔花园”被输入为“贝尔花园”Sql 如何确定街道名称或城市中是否需要空格?,sql,excel,vba,Sql,Excel,Vba,问题:我希望能够确定街道名称或城市名称中是否需要空格 原因是用户习惯于将两个词组合成一个词 例如,在数据库中,“贝尔花园”被输入为“贝尔花园” 它们是确定用户何时这样做并相应地添加空间的一种方法吗 你无法做到这一点,你需要某种模式来实现自动化,但在你的情况下,仅仅通过使用街道名称或城市名称来自动化“空间”是不可能的。你可以使用Regex,这是一个Regex验证测试 下面是如何做的解释 代码和正则表达式已更新,请转到末尾进行检查 打开Excel工作簿 Alt+F11打开VBA/宏窗口 在工具下添加
它们是确定用户何时这样做并相应地添加空间的一种方法吗 你无法做到这一点,你需要某种模式来实现自动化,但在你的情况下,仅仅通过使用街道名称或城市名称来自动化“空间”是不可能的。你可以使用Regex,这是一个Regex验证测试 下面是如何做的解释 代码和正则表达式已更新,请转到末尾进行检查
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
结果
没有。你怎么知道“冬季花园”是一个词还是两个词?@GordonLinoff:好吧,我就是这么想的。我知道在excel中,它们是一种使用LTR之类的东西来区分数字和字符的方法。我想,如果他们是一个这样做的方式与字符。谢谢您的输入您有所有街道名称和城市的列表吗?也许用下拉菜单代替?或自动完成?您可以检查“有效”列表中的每个条目,测试条目(从中删除空格后)是否与用户输入匹配(从中删除空格后)。您可以检查大写字母,并在没有空格的大写字母前添加空格。当然,这将使您使用Mc Donald而不是McDonald,使用O'Brien而不是O'Brien,但您可能会编写例外程序,以防空格不能插入大写字母之前。
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