2015-12-03 498 views
0

假设一个字的文件包含微软Word VBA宏搜索和替换(正则表达式)

ab{cdefg{hij{k 

而且我想{要移动一个位置向右像

abc{defgh{ijk{ 

我需要做与所有字符的数组然后运行与正则表达式搜索一个循环,并更换

搜索:

({)(array[index]) 

取代:

$2$1 

平原正则表达式,而不循环将无法工作,因为我处理具有复杂的人物印度语文字。我在inDesign中使用了JavaScript和ExtendScript,但我对VB没有任何线索。任何人都可以帮忙吗?

+0

你能描述印度语的文字是如何影响的事情?例如,一些印度语字符在Word中表达为2个字符,并且交换只会移动“{”一个字符而不是2。 – 2015-12-03 09:13:57

+0

是的。在一个字母和现实生活中出现的某些指示合并被视为一个字母,实际上是Unicode中2-5个字母的聚类。 – coldbreeze16

+0

我的(更明显)建议。如果Word的查找/替换无法处理您正在处理的文本,请忘记正则表达式,并着眼于Word对象模型(和VBA)这一事实,将您的文档视为一系列字符对象,可以是索引1 ..等等。然后你需要迭代查找“{”的字符序列(可能忽略某些特殊印度字符序列的一部分的{{“字符,尽管我怀疑会发生),然后检查以下字符并确定有多少个Unicode需要移动“{”的字符。 – 2015-12-03 21:50:15

回答

1

这可以用一个字通配符来进行搜索和替换:

With ActiveDocument.Range.Find 
    .ClearFormatting 
    .Replacement.ClearFormatting 
    .ClearAllFuzzyOptions 
    .Text = "(\{)(?)"   ' find opening brace followed by a single character 
    .Replacement.Text = "\2\1" ' swap positions 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchByte = False 
    .MatchAllWordForms = False 
    .MatchSoundsLike = False 
    .MatchFuzzy = False 
    .MatchWildcards = True 
End With 
ActiveDocument.Range.Find.Execute Replace:=wdReplaceAll 
+0

那什么都不做。发现下面的代码别处,做正常搜索和替换,但不会处理的Regex '随着ActiveDocument.Content 随着Selection.Find 。文本= CHRW(HB47)CHRW(&HB2C) .Replacement.Text = CHRW (HB2C)CHRW(HB47) 的.forward =真 .Wrap = wdFindContinue .Format =假 .MatchCase =假 .MatchWholeWord =假 .MatchWildcards =真 .Execute替换:= wdReplaceAll,正向:=真,_ 裹:= wdFindContinue' – coldbreeze16

+0

@ coldbreeze16:我的代码炒作你的示例文本。看来你可能有不同的意见?你可以发布吗? –