使用正则表达式提取括号之间的文本

Ziad El Hachem

用这样的句子:

“ [x] Alpha

[33] Beta”

我将一组带括号的数据提取为([x],[33])

使用VBA正则表达式模式:

"(\[x\])|(\[\d*\])"

我无法直接将未括弧的数据数组提取为(x,33)

使用网络资源建议进行模式

"(?<=\[)(.*?)(?=\])"

这是VBA特有的问题(即对Regex实施的限制)还是我误解了“向前和向后看”模式?

Public Function Regx( _
  ByVal SourceString As String, _
  ByVal Pattern As String, _
  Optional ByVal IgnoreCase As Boolean = True, _
  Optional ByVal MultiLine As Boolean = True, _
  Optional ByVal MatchGlobal As Boolean = True) _
  As Variant

Dim oMatch As Match
Dim arrMatches
Dim lngCount As Long

' Initialize to an empty array
arrMatches = Array()
With New RegExp
    .MultiLine = MultiLine
    .IgnoreCase = IgnoreCase
    .Global = MatchGlobal
    .Pattern = Pattern
    For Each oMatch In .Execute(SourceString)
        ReDim Preserve arrMatches(lngCount)
        arrMatches(lngCount) = oMatch.Value
        lngCount = lngCount + 1
    Next
End With


Sub testabove()
    Call Regx("[x] Alpha" & Chr(13) & _
      "[33] Beta", "(\[x\])|(\[\d*\])")
End Sub
维克多·史翠比维

在子模式周围使用捕获将获取所需的值。

使用

"\[(x)\]|\[(\d*)\]"

(或者,\d+如果您需要匹配至少一位数字,则*表示零次或多次出现,并且+表示一次或多次出现)。

或者,使用通用模式提取没有方括号的方括号内的所有内容

"\[([^\][]+)]"

然后,Submatches通过检查子匹配长度来访问正确的索引(由于您有替换,因此子匹配中的任何一个都将为空),然后就可以了。只需更改您的for循环

For Each oMatch In .Execute(SourceString)
    ReDim Preserve arrMatches(lngCount)
    If Len(oMatch.SubMatches(0)) > 0 Then
        arrMatches(lngCount) = oMatch.SubMatches(0)
    Else
        arrMatches(lngCount) = oMatch.SubMatches(1)
    End If
    ' Debug.Print arrMatches(lngCount) ' - This outputs x and 33 with your data
    lngCount = lngCount + 1
Next

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式以提取括号之间的文本

正则表达式提取括号之间的文本

正则表达式提取方括号之间的文本

正则表达式提取括号之间的特定文本

正则表达式提取括号之间的值

正则表达式提取方括号、逗号和引号 [] 之间的文本,"

在()括号之间返回文本的正则表达式

在括号之间返回文本的正则表达式

正则表达式在嵌套括号之间查找文本

正则表达式在大括号之间获取文本

使用正则表达式提取方括号内的文本和外部文本

使用正则表达式在括号之间选择以^ {要选择的文本}开头的文本

使用正则表达式模式提取括号之间的单词

使用正则表达式提取括号数据

使用正则表达式提取括号内的值

使用正则表达式提取括号中的数字

Java正则表达式提取标签之间的文本

括号之间的正则表达式

如何使用正则表达式排除两个大括号之间的文本?

如何使用正则表达式在方括号之间添加文本链接

正则表达式以获取括号之间的文本,该文本偶尔会丢失括号

使用正则表达式python提取标签之间的文本

使用R中的正则表达式提取某些符号之间的文本

在 String.Split() 中使用正则表达式提取 java 中 { 和 } 之间的文本

在R中,使用正则表达式提取标题之间的文本

使用正则表达式提取两个标记之间的文本

提取文本和 | 之间的数字 使用正则表达式 Python

使用正则表达式从文本中提取单词和逗号之间的名称

如何使用正则表达式(RegEx)在某些模式之间提取文本?