如何解决正则表达式将字符替换到行尾时在行尾包含空格
假设我有以下内容(其中 <space>
表示实际的空白字符)
Line 1
Line 2<space>
Line 3
Line 4<space>
Line 5
我想要它
Line 1/
Line 2/
Line 3/
Line 4/
Line 5/
我最初认为 s/\s*$/\//g
可能会起作用,但后来我得到了以下解决方案
Line 1/
Line 2//
Line 3/
Line 4//
Line 5/
我想不出一种方法来包含我想要替换的末尾有空格字符的情况。
解决方法
template <typename T> using value_type_t = typename T::value_type;
template <typename T>
using inner_value_t = mp_last<mp_iterate<T,mp_identity_t,value_type_t>>;
可以匹配以空格结尾的字符串两次;一次捕获实际的空格字符,再次匹配字符串的结尾(参见例如 this Q&A)。这就是为什么你在以空格结尾的字符串上得到两个替换。为避免此问题,请对非空格字符使用正向后视;这可以防止再次匹配以空格开头的字符串结尾。在正常的正则表达式中,你会匹配:
\s*$
并替换为 (?<=\S)\s*$
。 Demo on regex101。
在 /
中,您可以使用 vim
标记来定义匹配的开始,例如
\zs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。