У меня есть входные данные, такие как: the pixels are of 13.45 mm for the

Выходные данные после макроса должны быть такими:

the pixels are of 13,45 mm for the документа Word.

Я пытаюсь код ниже:

Sub RegexReplace1()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    On Error Resume Next

    RegEx.Global = True

    RegEx.Pattern = "([0-9]*).([0-9]*\s?mm)"

    ActiveDocument.Range = _
        RegEx.Replace(ActiveDocument.Range, ",")

End Sub

но он заменяет все это на .

2 ответа2

0

Во-первых, так как вам нужно соответствовать . , вы должны экранировать его с помощью \ (единственное . означает "я хочу сопоставить любой символ"):

([0-9]*)\.([0-9]*\s?mm)

Затем, так как вам нужно заменить . , вы должны использовать соответствующие круглые скобки вокруг него, а не вокруг чисел:

[0-9]*(\.)[0-9]*\s?mm
0

Вам нужно использовать $1,$2 качестве строки замены, а не просто , чтобы вставить ваши группы захвата до и после.

RegEx.Replace(ActiveDocument.Range, "$1,$2")

Также, как сказал Морган, тебе нужно сбежать . Я бы также предложил использовать + вместо * , чтобы убедиться, что вы действительно соответствуете измеренному значению.

([0-9]+)\.([0-9]+\s?mm)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .