2015-12-03 88 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:我的代碼炒作你的示例文本。看來你可能有不同的意見?你可以發佈嗎? –