regex - sed - 在模式之间应用替换
问题描述
我有两种模式START
,END
并且想用这些模式之间的下划线替换每个空格。
例子
Lorem ipsum dolor START sit amet, consectetur END adipiscing elit.
应该转化为
Lorem ipsum dolor START_sit_amet,_consectetur_END adipiscing elit.
我知道用下划线替换每个空格的正则表达式
sed 's/ /_/g'
而且我也知道如何匹配两个模式之间的部分
sed 's/.*START\(.*\)END.*/\1/g'
但我不知道如何将这两件事结合起来。
解决方案
作为替代方案,您可以使用 Perl:
perl -pe 's/(START.*?END)/$1=~s#\s#_#gr/ge'
该(START.*?END)
模式匹配一个子字符串START
,END
同时将其捕获到组 1 中,然后用组内容中的s#\s#_#gr
每个空格 ( \s
)替换_
。
或者,如果您使用的 Perl 不支持该r
选项:
perl -pe 's/(?:START|\G(?!^))(?:(?!END).)*?\K\s/_/g'
请参阅在线演示和第二个在线正则表达式演示。
(?:START|\G(?!^))(?:(?!END).)*?\K\s
比赛_
(?:START|\G(?!^))
-START
子字符串或上一个成功匹配的结尾(带\G(?!^)
)(?:(?!END).)*?
- 除换行符之外的任何字符,不开始END
子字符串,尽可能少\K
- 匹配重置运算符丢弃先前匹配的文本\s
- 一个空格字符。
推荐阅读
- python - sqlalchemy 中的三元组距离操作
- php - 嵌套的 wordpress 术语列表 - 过滤器
- spring-boot - 如何在 Springboot 中为 websocket 消息动态创建队列
- python - python包装器执行两个命令
- python - Python3 + ctypes回调在简单示例中导致内存泄漏
- javascript - react-native ScrollView中scrollTo的替代方案
- postgresql - 我是否需要将 CREATE TABLE 语句的列顺序与导入数据表的列顺序相匹配?
- android - Management API 删除被阻止的应用程序
- python - Python内部容器类
- function - Web 部署任务失败...在 Visual Studio 中发布 Azure 函数