excel - 将字符串拆分为行时跳过括号中的单词计数,以便行具有相同数量的不在括号内的单词
问题描述
将字符串拆分为行时跳过括号中的单词计数,以便行具有相同数量的单词,这些单词不在括号内,但仍包括拆分中的括号。对于我的单元格设置,请参阅附图:
以下 UDF 函数用于将长字符串拆分为单元格“D3”中预定义的单词数行。
公共函数 SplitOnNth(ByVal inputStr$, ByVal StartPos&, ByVal NumWords&) 作为字符串 Dim arr() As String, i As Long, newArr() As String arr = 拆分(inputStr) ReDim newArr(NumWords - 1) '数组是从零开始的,但你的字符串不是。减 1 对于 i = StartPos - 1 到 StartPos + NumWords - 2 If i > UBound(arr) Then Exit For '如果循环超过字符串中的最后一个单词,则退出 '括号中的任何内容都应在单词计数中被跳过,但应包含在单词拆分中 newArr(i - StartPos + 1) = arr(i) 下一个 SplitOnNth = 加入(newArr,“”) 结束功能
这就是我试图解决的问题。它是非常硬编码的,只适用于一行。非常感谢您的帮助,并在此先感谢您。
'括号中的任何内容都应在单词计数中被跳过,但应包含在单词拆分中 如果 arr(i) 像 "*(*" & "*)*" 那么 newArr(i - StartPos + 1) = arr(i) + " " + _ arr(i + 1) + " " + _ arr(i + 2) + " " + _ arr(i + 3) + " " + _ arr(i + 4) + " " 退出 别的 newArr(i - StartPos + 1) = arr(i) 万一 '结果在前两行是可以的,但对于其余的行不行 '一二三四 '(1) 五六七八
解决方案
我将使用正则表达式进行拆分,并将结果作为数组返回,您可以使用该INDEX
函数返回相关行,或者将公式作为数组公式输入一系列单元格。
您将在代码中注意到两个不同的正则表达式,具体取决于您是否要将带括号的子字符串与后续或前面的字符串一起保留。
另请注意,正则表达式将处理多个带括号的顺序子字符串:
编辑:( 错误更正)
Option Explicit
Function splitOnNth(inputString As String, numWords As Long) As String()
Dim RE As Object, MC As Object
Dim I As Long, J As Long
Dim strArray() As String
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.Pattern = "(?:(?:\([^)]+\)\s+)+)?\S+" 'in parentheses combined with following word
'.Pattern = "\S+(?:(?:\s+\([^)]+\))+)?" 'in_parentheses combined with preceding word
If .test(inputString) = True Then
Set MC = .Execute(inputString)
ReDim strArray(1 To Int(MC.Count / numWords + 1))
J = 1
For I = 1 To UBound(strArray)
For J = J To numWords * I
If J > MC.Count Then Exit For
strArray(I) = strArray(I) & " " & MC(J - 1)
Next J
strArray(I) = Mid(strArray(I), 2)
Next I
End If
End With
splitOnNth = strArray
End Function
这是对正则表达式的解释:
拆分单词,除了保留括号中的单词和后面的单词
(?:(?:\([^)]+\)\s+)+)?\S+
- 匹配下面的正则表达式
(?:(?:\([^)]+\)\s+)+)?
- 0 到 1 次,尽可能多次,按需回馈(贪婪)
?
- 匹配下面的正则表达式
(?:\([^)]+\)\s+)+
- 0 到 1 次,尽可能多次,按需回馈(贪婪)
- 匹配不是“空白字符”的单个字符(ASCII 空格、制表符、换行符、回车符、垂直制表符、换页符)
\S+
推荐阅读
- python - 在python中加入两个带有条件的df
- uicollectionview - Swift:以编程方式在 UICollectionViewController 的第一行之前设置一个视图
- angular - 两个对话框中的循环依赖
- python - Django Rest Framework关系属性错误
- python - python/tkinter 在按钮按下时将单词的单个字母添加到标签中
- heroku - 使用 botpress 创建 Telegram 机器人
- load-testing - 自托管的 BlazeMeter Sense 和 Yandex 过载类似物
- linux - Linux sysfs 上的文件修改何时以及使用哪个函数?
- php - ACF 计数图库图片
- java - 如何在处理项目中使用 Gradle?