【问题标题】:Block Finder - Like Function块查找器 - 类似功能
【发布时间】:2020-07-21 22:14:51
【问题描述】:

我有一个名为 strBlockText 的大字符串(超过 255 个字符)。该字符串包括随机文本和块号。块号应采用###Block####-## 格式(IE:245Block6533-56),但有时有人在文本中输入错误的块号格式 - 例如##Block####- ## 或 ###Block###-## 或 ##Block###-##...等。

**注意,这仅适用于纯文本。

我想编写一个函数,它能够声明“识别出错误的块编号格式”。当块号被胖手指时。

这是我用作示例的文本:

这是一个测试,我们需要弄清楚为什么它不起作用。 24Block1234-23 这是一个测试,我们需要弄清楚为什么会这样 不工作。 245Block4234-14 这是一个我们需要计算的测试 找出为什么这不起作用。这是一个测试 245Block6533-56 我们 需要弄清楚为什么这不起作用。

这是代码......我觉得应该可以,但不是:

Dim strBlockText As String
Dim strBlockCheck As String

If (((strBlockText Like "*##Block####-##*") or _
     (strBlockText Like "*###Block###-##*") or _
     (strBlockText Like "*##Block###-##*")) And _
 (Not strBlockText Like "*###Block####-##*")) Then

    strBlockCheck = "Wrong block number format identified."

Else

    strBlockCheck = "Block number format acceptable."

End If

为此使用正则表达式而不是 like 会更好吗?...有 like 不起作用的原因吗?

【问题讨论】:

  • 你的测试字符串包含This is a Test that 245Block6533-56,所以你的字符串就像*###Block####-##*——所以你的代码接受它。使用正则表达式并迭代匹配是要走的路
  • Regex 肯定会更好
  • 为什么将数据输入到复杂的字符串中,而不仅仅是离散值 - 每个值输入的记录?可以使用 InputMask。
  • 我以前没有玩过输入掩码。这段文字的输入就像一篇文章,但有时我的用户会输入错误的内容。

标签: vba ms-access regexp-like


【解决方案1】:

考虑这个 Sub 使用带有后期绑定的 RegExp 对象:

Sub testRegExp2(strS)
Dim regexOne As Object, Matches As Object, Match As Object
'Set regexOne = New RegExp
Set regexOne = CreateObject("VBScript.RegExp")
regexOne.Pattern = "[0-9]+Block[0-9]+-[0-9]+"
regexOne.Global = True
Set Matches = regexOne.Execute(strS)
For Each Match In Matches
    If Not Match Like "###Block####-##" Then
        Debug.Print "Wrong block number format identified: " & Match
    Else
        Debug.Print "Block number format acceptable: " & Match
    End If
Next
End Sub

【讨论】:

  • June7,一如既往的你是最棒的。非常非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多