如何使 RegEx 查询仅匹配整个字符串?

Posted

技术标签:

【中文标题】如何使 RegEx 查询仅匹配整个字符串?【英文标题】:How to make a RegEx query only match the whole string? 【发布时间】:2013-02-21 17:37:19 【问题描述】:

我在 Excel 2012 中使用 VBA 将单元格中的内容与正则表达式匹配,但它不起作用。

我正在运行以下代码:

Dim r1 As New RegExp
r1.Pattern = "(.)(\s+)?((?:[a-z][a-z]+))(\s+)(\d+)?"
r1.IgnoreCase = True

For i = 1 To 5
    If r1.Test(Sheet3.Cells.Item(i, 5)) = True Then
        MsgBox ("MATCH: " & Sheet3.Cells.Item(i, 5))
    Else
        MsgBox ("NOT MATCH: " & Sheet3.Cells.Item(i, 5))
    End If
Next i

所以它应该匹配字符串:“A Person 01” 但不匹配:“A Person abc 01”

但它匹配两者,因为可以在字符串的后半部分找到表达式。 你如何让它只匹配整个字符串? 所以只有当单元格的全部内容是:单个字母、空格、单词、空格、数字时才匹配

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

你可以使用这个正则表达式

^[a-zA-Z]\s+\w+\s+\d+$

如果您想完全匹配,则必须指定 start(^) 和 end($)..

[a-zA-Z] 匹配单个字母

\s+ 匹配 1 到多个空格

\w+ 匹配一个单词..它类似于[a-zA-Z0-9_]+

\d+ 匹配 1 到多个数字

【讨论】:

谢谢,不过没用。我试过 ^.\s+?[a-z][a-z]+(\s)(\d+)$ 没有用,但如果你有“^$ 换行符匹配(m)”,则在regexpal.com 中有效框打勾,我不确定这意味着什么或如何在我的 VBA 代码中复制它? @user2096512 将 Multiline 属性设置为 True 好的,开始工作了,单元格中有一些前导空格,因此使用了 Trim() 函数。干杯。

以上是关于如何使 RegEx 查询仅匹配整个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式仅匹配匹配组 1 中日期的最后一部分 [重复]

leetcode如何实现 regex 正则表达式引擎

正则表达式。匹配整个单词

正则表达式:如何在捕获单个组时匹配整个字符串 [重复]

smarty正则表达式替换regex_replace如何匹配

如何在 C# Regex 中使用“或”、“和”?