Как заменить перевод строки в VBScript RegEx

Я использую VBScript и у меня есть скрипт, который преобразует XML в текстовый файл.

Я пытаюсь сделать замену, чтобы заменить строку ###EntryEnd###\| к НЧ персонажу.

Я старался \n а также \x0a в шаблоне замены, но они не работают. Единственный обходной путь, который я нашел, это использовать Chr(10) вместо.

Я искал ответ на это поведение, так как не смог его найти. И то и другое \n а также \x0a должно сработать. Любой совет?

Вот код:

' Method to process the file
Private Function PrepFile(ByVal strInp)
    With New RegExp
        .Global = True
        .Pattern = "\|"
        strInp = .Replace(strInp, "")
        .Pattern = "<xmldoc .*?xml:lang=""([^""]+)"">"
        strInp = .Replace(strInp, "English|$1|Part Of Speech|Note|EngDef|Glossary Definition###EntryEnd###|")
        .Pattern = "<remove>.*?</remove>"
        strInp = .Replace(strInp, "")
        .Pattern = "(<tab/>|</para>)"
        strInp = .Replace(strInp, "|")
        .Pattern = "<[^>]*>"
        strInp = .Replace(strInp, "")
        .Pattern = "\n"
        strInp = .Replace(strInp, "")
        .Pattern = "###EntryEnd###\|"
        strInp = .Replace(strInp, chr(10))
    End With
    PrepFile = strInp
End Function

Пример файла:

<?xml version="1.0" encoding="UTF-8"?>
<xmldoc source="" type="TERMS" xml:lang="hu-HU">
<para id="13" name="Entry"><notrans><seg>School Administrator</seg><tab/></notrans><remove>___________</remove><seg>iskolavezető</seg></para>
<para id="14" name="Usage"><notrans><seg> </seg><tab/></notrans><remove>HASZNÁLAT:</remove><seg> </seg></para>
<para id="15" name="EntryText"><notrans><seg> </seg><tab/></notrans><remove>MEGHATÁROZÁS:</remove><seg> </seg></para>
<para id="16" name="Context"><remove>PÉLDA:</remove><remove><seg>Cathy Brown iskolavezető</seg></remove><notrans>###EntryEnd###</notrans></para>
<para id="17" name="Entry"><notrans><seg>School Resource Officer</seg><tab/></notrans><remove>___________</remove><seg>iskolarendőr</seg></para>
<para id="18" name="Usage"><notrans><seg> </seg><tab/></notrans><remove>HASZNÁLAT:</remove><seg> </seg></para>
<para id="19" name="EntryText"><notrans><seg>a law enforcement officer who is responsible for providing security and crime prevention services in schools in parts of the United States and Canada.|</seg><tab/></notrans><remove>MEGHATÁROZÁS:</remove><seg>rendőr, aki azért felelős, hogy az iskolákban biztonsági és bűnmegelőzési feladatokat lásson az Egyesült Államok és Kanada egyes területein.</seg></para>
<para id="20" name="Context"><remove>PÉLDA:</remove><remove><seg>Ocalai iskolarendőrök</seg></remove><notrans>###EntryEnd###</notrans></para>
</xmldoc>

1 ответ

Решение

В вашем вопросе "проблема" (просто неверное предположение) может быть найдена в

  • И то и другое \n а также \x0a должно сработать

Документация Replace Метод не утверждает, что строка замены позволяет использовать escape-последовательности, кроме $1, $2,... ссылки на группы захвата в шаблоне регулярного выражения.

Итак, если RegExp объект не обеспечивает такое поведение в строке замены, и так как синтаксический анализатор VBScript не обрабатывает никакие escape-последовательности в строках, кроме экранированных двойных кавычек, нет никакого элемента, обрабатывающего \n перевод строки.

Вы можете использовать указанные escape-последовательности для представления непечатаемых символов в строке шаблона поиска, но они не рассматриваются как escape-последовательности в строке замены.

Если вам не нравится Chr(10) вызов функции, вы можете использовать доступные vbLf константа для ссылки на символ перевода строки

strInp = .Replace(strInp, vbLf)
Другие вопросы по тегам