regex - Powershell:删除2个字符串之间的所有内容
问题描述
得到一个包含 2 行文本的 html。
<!-- START -->
asdf
<!-- END -->
这两个标记之间可以承受任何东西及其不断变化的数据,因此它的数据始终不同。是否有可能擦除这两个之间的所有行?
尝试过正则表达式
(?sm)<!-- START -->.*?(?=^<!-- END -->)
但他总是从第一行而不是下面开始。
有人可以帮我开始使用正则表达式然后删除它吗?
解决方案
这里的主要问题是您在没有捕获左侧分隔符的情况下进行匹配。
要匹配和擦除两个多字符定界符之间的任意内容,您需要将两个定界符都放在环视中:
-replace '(?<=left_hand_delim).*?(?=right_hand_delim)'
或者,使用正则表达式中的捕获组和替换中的反向引用:
-replace '(left_hand_delim).*?(right_hand_delim)', '$1$2'
您可以使用
$regex='(?ms)(?<=^\s*<!-- OPC-ITEM-ENTRIES START -->\s*).*?(?=\s*<!-- OPC-ITEM-ENTRIES END -->)'
(Get-Content -raw $file) -replace $regex, '$1$2' | Set-Content $outfile
请参阅正则表达式演示 1和正则表达式演示 #2(请参阅上下文选项卡)。
您必须使用-raw
选项将文件内容读入单个变量,因为您需要单行s
标志来.
匹配任何字符,包括换行符。
推荐阅读
- python - WindowsError:[错误 267] 尝试在 RenPy GUI 中使用脚本编辑器时目录名称无效
- nginx - 将安全标志设置为入口 nginx 关联 cookie/通过 nginx 规则编辑 set-cookie 标头
- java - Flyway 无法在 Spring Boot 中创建和查找数据库
- unity3d - unity3d shader e -f 转换为 glsl
- airflow - Airflow 插件 - 向 DAG 页面添加按钮
- node.js - Sequelize CLI:db:migrate 导致大多数列无法添加
- javascript - 普通 JavaScript 函数中的关键字“this”
- laravel - 如何对通过请求发送的 json 对象数组运行测试?
- python - 如何让 Python 脚本在 Web 服务器/主机上运行?
- javascript - 使用 Apps 脚本使用 IF 语句在数组中查找两个元素