删除单词 w/Upper 和小写字母或仅删除小写字母

Delete Words w/Upper And Lowercase Letters or Only Lowercase Letters

Objective: 我有一个带有列 Item_Desc 的 Access table。我希望此列仅包含服装的品牌名称。品牌名称始终以全部大写形式书写,例如 "RALPH LAUREN".

问题: Item_Desc 列填充了品牌名称和服装类型(以及颜色等)。因此,Item_Desc 列可能包含 "RALPH LAUREN"(好)或可能 "RALPH LAUREN Coat black"(坏)。

问题: 是否有一个查询可以 运行 删除 Item_Desc 中的单词:1) 以大写字母开头,后跟大写字母由小写字母(例如,"Coat"),或 2) 仅以小写字母书写(例如,"black")。

因此,"RALPH LAUREN Coat black" 最终会在 Item_Desc 列中显示为 "RALPH LAUREN"。

我的 table 名字是 "Brand"。

最后,我无法控制生成的报告,所以很遗憾,我无法将品牌、样式和颜色导入到单独的列中(我不认为!)。

您可以使用基于正则表达式的 VBA 函数来实现您的目标。

这是在立即 window 中使用您的样本输入测试的一个这样的函数:

? OnlyUpperCaseWords("RALPH LAUREN")
RALPH LAUREN
? OnlyUpperCaseWords("RALPH LAUREN Coat black")
RALPH LAUREN

您可以在 UPDATE 查询中使用该函数来更改存储的 Item_Desc 值:

UPDATE Brand AS b
SET b.Item_Desc = OnlyUpperCaseWords(b.Item_Desc)
WHERE b.Item_Desc Is Not Null;

这是函数...

Public Function OnlyUpperCaseWords(ByVal strSource As String) As String
    Static re As Object

    If re Is Nothing Then
        Set re = CreateObject("VBScript.RegExp")
        re.Global = True
        re.IgnoreCase = False
        re.Pattern = "\s*\b[A-Za-z]*[a-z]+[A-Za-z]*\b\s*"
    End If
    'OnlyUpperCaseWords = re.Replace(strSource, vbNullString)
    OnlyUpperCaseWords = Trim(re.Replace(strSource, " "))
End Function