作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有数据,我需要拆分每个 block ,以便将每个 block 存储在单独的行中。整个文本如下所示:
م
مطروح
الحمام
school
الصف
:
الصف الأول
1
458316219
30709101600371
ابراهيم وليد ابراهيم ابوالحمد
منافذ فورى
2
458361688
30702263300318
احمد ابوالريش فرج عبدالله
منافذ فورى
3
458312720
30703143300418
اسلام فتحى محمد ناجى
منافذ فورى
4
458790904
30606101802299
اسلام نصار حسين نصار حسين عبد الونيس
منافذ فورى
5
458312908
30612013300259
ايمن راضى صالح سلومه
منافذ فورى
6
458884564
30802203300186
بسمه محمد ابراهيم ظدم
منافذ فورى
7
477625786
30708263300235
بشار نصر الله مصوف السايب
منافذ فورى
\d{1,3}\n
Sub Test()
Dim a(), s As String, i As Long, j As Long
Dim bot As New ChromeDriver
With bot
.AddArgument "--headless"
.Get "file:///C:\Sample.html"
s = .FindElementByCss("table[id='all']").Text
End With
a = GetMatches(s, "^\s*\d{1,3}(?:(?:\r\n|[\r\n])(?!\s*\d{1,3}\n).*)+")
For i = LBound(a) To UBound(a)
Debug.Print a(i)
Next i
End Sub
Function GetMatches(ByVal inputString As String, ByVal sPattern As String) As Variant
Dim arrMatches(), matches As Object, iMatch As Object, s As String, i As Long
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = sPattern
If .Test(inputString) Then
Set matches = .Execute(inputString)
ReDim arrMatches(0 To matches.Count - 1)
For Each iMatch In matches
arrMatches(i) = iMatch.SubMatches.Item(0)
i = i + 1
Next iMatch
Else
ReDim arrMatches(0)
arrMatches(0) = vbNullString
End If
End With
GetMatches = arrMatches
End Function
最佳答案
您可以使用
^\s*\d{1,3}(?:\n(?!\s*\d{1,3}\n).*){4}
.Global = True
一起使用和
.MultiLine = True
选项,无需设置
.IgnoreCase
至
True
.
\r
,回车,在 Excel 单元格值中用于定义换行符,您可能需要全部替换
\n
带有
\r
的模式中的字符.
^
- 行首\s*
- 0 个或多个空格字符 \d{1,3}
- 一到三位数 (?:\n(?!\s*\d{1,3}\n).*){4}
- 一个 non-capturing group匹配四个 ({4}
) 的出现\n
- 换行符 ( \n
) 是... (?!\s*\d{1,3}\n)
- ( negative lookahead ) 没有立即跟在后面:\s*
- 0 个或多个空格 \d{1,3}
- 一位、两位或三位数字\n
- 换行符 .*
- 尽可能多的除换行符以外的任何 0 个或多个字符。 ^[^\S\n]*(\d{1,3})\n\s*(\d{6,})[^\S\n]*\n\s*(\d{14})[^\S\n]*\n(.+)\n(.+)
^
- 字符串开头 [^\S\n]*
- 除换行符 (\d{1,3})
- 一到三位数 \n
- 换行符 \s*
- 任何 0+ 个空格 (\d{6,})
- 第 2 组:[^\S\n]*\n\s*
- 除了换行符、换行符和任何 0 个或多个空格 (\d{14})
- 第 3 组:十四位数 [^\S\n]*\n
- 除换行符和换行符之外的 0 个或多个空白字符 (.+)
- 第 4 组:除换行符以外的任何一个或多个字符,尽可能多 \n
- 换行符 (.+)
- 第 5 组:除换行符以外的任何一个或多个字符,尽可能多 关于regex - 在 VBA 中使用正则表达式拆分块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62342267/
我是一名优秀的程序员,十分优秀!