我正在努力学习正则表达式来回答关于SO葡萄牙语的问题。
.MultiLine = False
)? 1 One without dot. 2. Some Random String. 3.1 With SubItens. 3.2 With number 0n mid. 4. Number 9 incorrect. 11.12 More than one digit. 12.7 Ending (no word).
1 One without dot.
2. Some Random String.
3.1 With SubItens.
3.2 With number 0n mid.
4. Number 9 incorrect.
11.12 More than one digit.
12.7 Ending (no word).
我的想法是使用Regex with Split,但我无法在Excel上实现该示例。
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "plum-pear"
Dim pattern As String = "(-)"
Dim substrings() As String = Regex.Split(input, pattern) ' Split on hyphens.
For Each match As String In substrings
Console.WriteLine("'{0}'", match)
Next
End Sub
End Module
' The method writes the following to the console:
' 'plum'
' '-'
' 'pear'
阅读this和this。 RegExr Website与输入中的表达式/([0-9]{1,2})([.]{0,1})([0-9]{0,2})/igm
一起使用。
获得以下内容:
有更好的方法吗?正则表达式是正确还是更好的生成方式?我在谷歌上找到的例子没有让我了解如何正确使用RegEx与Split。
也许我对Split Function的逻辑感到困惑,我想得到拆分索引,而分隔符字符串是正则表达式。
答案 0 :(得分:1)
我可以说它以单词和句号结尾
使用
\d+(?:\.\d+)*[\s\S]*?\w+\.
请参阅regex demo。
<强>详情
\d+
- 一位或多位(?:\.\d+)*
- 零个或多个序列:
\.
- dot \d+
- 一位或多位[\s\S]*?
- 任意0个字符,尽可能少,直到第一个...... \w+\.
- 1个单词字符后跟.
。以下是VBA代码示例:
Dim str As String
Dim objMatches As Object
str = " 1 One without dot. 2. Some Random String. 3.1 With SubItens. 3.2 With Another SubItem. 4. List item. 11.12 More than one digit."
Set objRegExp = New regexp ' CreateObject("VBScript.RegExp")
objRegExp.Pattern = "\d+(?:\.\d+)*[\s\S]*?\w+\."
objRegExp.Global = True
Set objMatches = objRegExp.Execute(str)
If objMatches.Count <> 0 Then
For Each m In objMatches
Debug.Print m.Value
Next
End If
注意强>
您可能要求匹配仅停留在+ .
后面,后跟0 +空格和使用\d+(?:\.\d+)*[\s\S]*?[a-zA-Z]+\.(?=\s*(?:\d+|$))
的数字。
(?=\s*(?:\d+|$))
正向前瞻要求存在0+空格(\s*
),后跟1+位数(\d+
)或字符串结尾($
)当前位置的权利。
答案 1 :(得分:0)
如果VBA的拆分支持后视式正则表达式,那么这个可以正常工作,假设除了索引之外没有数字:
\s(?=\d)