加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – Powershell:将文件的一部分读入变量

发布时间:2020-12-14 05:59:55 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一种多语言脚本.它不是真正的多语言,因为它实际上需要多种语言来执行,尽管它可以被 Shell或Batch“引导”.我有这个部分没问题. 我遇到问题的部分是一些嵌入式Powershell代码,它需要能够将当前文件加载到内存中并提取用另一种语言编写的某个部
我正在尝试创建一种多语言脚本.它不是真正的多语言,因为它实际上需要多种语言来执行,尽管它可以被 Shell或Batch“引导”.我有这个部分没问题.

我遇到问题的部分是一些嵌入式Powershell代码,它需要能够将当前文件加载到内存中并提取用另一种语言编写的某个部分,将其存储在变量中,最后通过它成了一名翻译.我有一个类似XML的标记系统,我用它来标记文件的各个部分,希望不会与任何其他语言冲突.标记看起来像这样:

lang_a_code
# <{LANGB}>
   ... code in language B ...
   ... code in language B ...
   ... code in language B ...
# <{/LANGB}>
lang_c_code

#是注释标记,但注释标记可以是不同的东西,具体取决于该部分的语言.

我遇到的问题是我似乎无法找到一种方法来隔离文件的那一部分.我可以将整个文件加载到内存中,但我无法获取标记之间的内容.这是我目前的代码:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

powershell -ExecutionPolicy unrestricted -Command ^

    $re = '(?m)^<{LANGB}^>(.*)^<{/LANGB}^>';^
    $lang_b_code = ([IO.File]::ReadAllText(^'%0^') -replace $re,'$1');^
    echo "${re}";^
    echo "Contents: ${lang_b_code}";

到目前为止我尝试过的所有内容都会导致整个文件在内容中输出,而不仅仅是标记之间的代码.我已经尝试了不同的方法来转义标记中使用的符号,但它总是导致相同的事情.

注意:使用^是必需的,因为顶级解释器是Batch,它挂在尖括号和其他随机的东西上.

解决方法

由于只有一个块,您可以使用正则表达式

$re = '(?s)^<{LANGB}^>(.*)^^.*^<{/LANGB}^>';^

但是使用-match运算符,然后使用$matches [1]变量访问文本,该变量是作为-match的结果设置的.

所以,在正则表达式声明之后,使用

[IO.File]::ReadAllText(^'%0^') -match $re;^
echo $matches[1];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读