我有形状对象,我想以任何方式删除两个字符串之间的文本。 e.g:
Dim oRang As RangeSet oRang = ActiveDocument.Shapes(1).TextFrame.TextRange
Const firstWord = "father"
const secondWord = "mother"
我在oRang有文字:"父亲ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv mother"。
我想删除父母之间的所有单词。 我怎么能这样做?
谢谢,
塔尔
答案 0 :(得分:0)
由于这个问题是关于字符串操作的,并且为方便起见并没有与形状有任何关系,我将假设输入字符串位于一个名为str
的变量中,并将结果输出到控制台。根据需要进行调整。
基本上有两种方法。第一个使用内置函数 InStr
来搜索字符串,Left
和Mid
来检索字符串的一部分:
Dim firstWordLocation As Long
Dim secondWordLocation As Long
firstWordLocation = InStr(str, firstWord)
secondWordLocation = InStr(str, secondWord)
If firstWordLocation > 0 And secondWordLocation > 0 Then
Debug.Print Left(str, firstWordLocation + Len(firstWord) - 1) & Mid(str, secondWordLocation)
End If
另一种解决方法是使用正则表达式。它们功能更强大,可以以非常紧凑的方式执行复杂的字符串操作。
库 Microsoft VBScript Regular Expressions 5.5 提供了一个RegExp
类,可以按如下方式使用(有关详细信息,请参阅https://stackoverflow.com/a/22542835):
Dim regex As New VBScript_RegExp_55.RegExp
regex.Pattern = "(.*?" & firstWord & ").*?(" & secondWord & ".*)"
Debug.Print regex.Replace(str, "$1$2")
这将输入字符串替换为Pattern
中第一个和第二个括号的内容,因此省略了它们之间的所有内容。
请注意,如果保留字符.*+?()[]{}^$\
出现在\
或firstWord
中,则必须使用反斜杠secondWord
对其进行转义。
如果输入字符串中有换行符,则应查看https://superuser.com/q/399381。
如果要将此字符串放回形状并使用VBA格式化其中的某些部分,则必须使用Character
的{{1}}属性,该属性表示形状中的每个单个文本字符。现在,您可以使用这些字符对象分配所需的格式。
有关详细信息,请参阅https://msdn.microsoft.com/de-de/library/office/ff743845.aspx(尽管该文档适用于PowerPoint,但我认为它也适用于Word)。