使用包含下面给出数据的单元格的Excel工作表
小区1:
简介和基本措辞
1,3步骤1和3
- 1的子步骤1 - 1的子步骤2 ...
2.步骤2.
- 子步骤1 of 24,6。步骤4和6
5.第5步
注意:几个步骤已完全停止("。")结束
预期 - 希望根据步骤拆分文本(而非基于子步骤)。引言和基本措辞应与Cell1一起出现
小区1 -
简介和基本措辞
1,3步骤1和3
- 1的子步骤1 - 1的子步骤2 ......
Cell2-
- 第2步。
醇>
- 子步骤1的1
Cell3-
4,6。步骤3和6
cell4
- 第5步
醇>
以下是给我不同结果的方法
方法1 :使用Crriage return(Chr(10))
If InStr(1, str, Chr(10)) <> 0 Then
arrVars = Split(str, Chr(10))
...
End If
结果:拆分下面的每个文字
小区1:
1,3。步骤1和3
Cell2:
- 1的子步骤1。
Cell3:
...
方法2 :使用正则表达式
re.Pattern = "^\d[\.]?[, \d\.]? ([\s\S]*?)\r$"
Set oCol = re.Execute(str)
For Each sMtch In oCol
sStep = Trim(sMtch.SubMatches(0))
...
Next
结果: 0匹配
方法3 :在全站点上使用正则表达式拆分(&#34;。&#34;)
re.Pattern = "^\d[\.]?[, \d\.]? ([\s\S]*?)\.$"
结果:
Cell1:
1,3。步骤1和3
- 1的子步骤1。 ...
Cell2:
方法4 :使用正则表达式在第一步之前包含前置文本
"(?:^[\s\S]?|[\r\n])(\d+(?:, *\d+)?\.[\s\S]*?)(?=[\r\n]+\d+(?:, *\d+)?\.[\s\S]*|$)"
结果: 不包括前一步到第一步的前文本
答案 0 :(得分:1)
您可以使用
(?:^|[\r\n])(\d+(?:, *\d+)?\.[\s\S]*?)(?=\n\d+(?:, *\d+)?\.|$)
请参阅regex demo
确保您使用.Global = True
,.Multiline = False
并访问.Submatches(1)
(第一个捕获组的内容)。
模式详情:
(?:^|[\r\n]+)
- 一个非捕获组,有两个选项,可以是字符串或换行符的开头(\d+(?:, *\d+)?\.[\s\S]*?)
- 第1组捕获:
\d+
- 一位或多位(?:, *\d+)?
- 可选序列:,
,后跟0 +空格和1+位数\.[\s\S]*?
- 一个点(\.
)然后0+任何字符,尽可能少(?=[\r\n]+\d+(?:, *\d+)?\.|$)
- 需要字符串$
或结尾的正向前瞻
[\r\n]+
- 换行符(1个或多个CR或LF符号)\d+
- 一位或多位(?:, *\d+)?
- 见上文\.
- 一个点。