regex - 正则表达式:选择一个字符的每次出现直到另一个字符
问题描述
我在文档中有几行看起来像这样:
foo-bar-foo[Foo - Bar]
我想选择每个-
字符,直到[
每行的第一个括号。因此-
不应选择方括号中的。
如何使用正则表达式实现这一目标?
我已经有了这个正则表达式/.+?(?=\[)/g
,它选择每个字符直到第一个字符,[
但我只想要-
.
编辑:我想用sed
命令(GNU)替换这些选定的字符。
解决方案
您可以使用
sed -E ':a; s/^([^[-]+)-/\1/; ta'
查看在线演示:
#!/bin/bash
s='foo-bar-foo[Foo - Bar]'
sed -E ':a; s/^([^[-]+)-/\1/; ta' <<< "$s"
# => foobarfoo[Foo - Bar]
详情:
-E
- 启用 POSIX ERE 语法(这样就无需转义捕获括号和+
量词):a
-a
标签s/^([^[-]+)-/\1/
- 找到一个或多个字符,而不是[
从-
字符串的开头捕获此子字符串到组 1 (\1
) 中,然后匹配一个-
字符ta
- 成功替换后跳转到a
标签
推荐阅读
- macos - 如何使用 VSCode 和 CodeLLDB 调试 Rust 和 WebAssembly 程序?
- python - 使用 sklearn 计算 LedoitWolf 收缩协方差矩阵
- tensorflow - tf.layers.conv2d 的掩码操作
- python - 训练中的 TensorFlow 错误:tensorflow.python.framework.errors_impl.InvalidArgumentError
- python - 通过 crontab 运行 python 脚本不接受包含 % 的参数
- python - Matplotlib 的 mPlot3d 切出部分情节背景
- css - Vuetify 中的左对齐按钮
- wordpress - 添加自定义永久链接和重写规则后博客分页抛出 404
- ionic-framework - 自定义验证器反应形式离子
- python - PyQt5 QSqlDatabase:未加载 ubuntu 的 QMYSQL 驱动程序