gpt4 book ai didi

regex - excel-vba正则表达式模式

转载 作者:行者123 更新时间:2023-12-02 10:34:33 25 4
gpt4 key购买 nike

我想要以下函数来验证字符串(如果它看起来像这样):

  • 任何数字(包括分数和小数)
  • 可选件/袋/盒同义词之一
  • 可选的男性/女性同义词之一

每个部分之间可以有一个空格,并且 2 个可选部分的顺序无关紧要(“2 boxmale”==“2male box”)

但是这个函数没有做任何有用的事情,除了以数字开头的所有内容:

Function validAmount(Zelle As Variant)
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Pattern = "\d\s?(pcs|pieces|piece|pc|stk|bags|bag|box|bx|boxes)?\s?(male|m|female|f)?"
If (regEx.test(Zelle)) Then
validAmount = True
Else
validAmount = False
End If End Function

我希望我的错误不是太愚蠢

编辑:我想到了一个附加功能。我如何允许上述模式的多个实体用“”分隔,例如“1盒女性,3袋m,4件男性”

ps:两种解决方案都工作得很好,但允许类似“1 男女”或“2 盒袋”的内容

编辑2:首先:非常感谢您的帮助!我永远不会自己解决这个问题!我想在一切按预期进行后立即单击“已解决”(无法单击“向上”,因为我的声誉仍然太低)。如果我应该早点点击它,我很抱歉。这是我的第一个问题,我对你的答案来得如此之快有点不知所措:)

我想我无法表达我的愿望:D 真的很抱歉!这是第三次尝试:每组中只应(至少)允许一个。真正的输入应该是:“#框性别”“#性别框”“# 盒子”“# 性别”“#”但不是:“#box box”或“#gender 性别”

@sln:我认为你的第一个看起来更像是我想要的,但它允许同一组的两个实例,即使它不应该寻找我:((与 JMax 解决方案相同)

@JMax:我喜欢你的“分割”解决方案!甚至没有想到这个简单的技巧:D 我是如此专注于正则表达式,以至于没有想到其他任何事情

最佳答案

这是一个尝试:

Function validAmount(Zelle As String)
Dim sBoxes As String, sGender As String
Dim arr() As String
Dim i As Integer

arr = Split(Zelle, ",")
sBoxes = "pcs|pieces|piece|pc|stk|bags|bag|box|bx|boxes"
sGender = "male|m|female|f"

validAmount = True
For i = 0 To UBound(arr)
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Pattern = "\d\s?(((" & sBoxes & ")?\s?(" & sGender & "))|((" & sGender & ")?\s?(" & sBoxes & ")))?$"
If (regEx.test(arr(i))) Then
validAmount = validAmount And True
Else
validAmount = validAmount And False
End If
Next i
End Function

这是一个测试过程:

Sub unitTest()
'could use debug.Assert too
Debug.Print (validAmount("1 box") & " should be True")
Debug.Print (validAmount("1 boxe male") & " should be False")
Debug.Print (validAmount("1 pcs female") & " should be True")
Debug.Print (validAmount("1boxes") & " should be True")
Debug.Print (validAmount("1 female pcs") & " should be True")
Debug.Print (validAmount("boxes") & " should be False")
Debug.Print (validAmount("2 male box") & " should be True")
Debug.Print (validAmount("1 mytest") & " should be False")
Debug.Print (validAmount("1 pc box") & " should be False")
Debug.Print (validAmount("1 box box") & " should be False")
Debug.Print (validAmount("1 box female, 3 bags m, 4pcs male") & " should be True")
End Sub

我已将框和性别更改为字符串,以便您可以将两者添加到您的模式中(如果没有这个技巧,我不知道有什么方法可以检查顺序。有人有更好的主意吗?
我还添加了一个 $ 来告诉 Excel 这是字符串的结尾,否则任何以数字开头的字符串都会通过。

关于regex - excel-vba正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405628/

25 4 0
文章推荐: ajax - 为什么通过 HTTP 进行的 AJAX 身份验证被认为是不安全的?
文章推荐: java - 锚定 Pane 中元素的顺序
文章推荐: java - 如何获取 List 的特定索引中的总项目数?