替换前导空格并在特定字符之前终止匹配

本文关键字:字符 终止 空格 替换 | 更新日期: 2023-09-27 18:24:53

不知道如何为以下内容构建替换模式。

我有一个像下面这样的行阵列:

<span> code <span> code <span/> code </span>
    <span> code <span> code <span/> code </span>
    <span> code <span> code <span/> code </span>
        <span> code <span> code <span/> code </span>

每行的开头都有一个空格。它可以是一个空间,也可以是两个空间或N个空间。此外,线路本身的任何位置都可能存在空格。

所需要的是,仅在第一个<字符之前的行的开头替换空格。每个空格应替换为&nbsp;

因此,如果有1个空格字符-如果有2个空格,则应替换为&nbsp;-应为&nbsp;&nbsp;基本上,N个空格字符应替换为N个&nbsp;

我当然可以用代码来实现,但这不是最优的。我已经尝试过纯使用regex来实现这一点,但不知道如何构建正确的模式。

欢迎在任何语言(Ruby、C#、Python、Perl)上使用这种替换方法。

附言:我正在逐行处理,所以构建替换模式就足够了,它将在单行的边界内工作。

p.p.S.我已经足够接近lookahead了,但仍然不知道如何在第一个<之后停止替换空格。

替换前导空格并在特定字符之前终止匹配

在c#中,没有问题

String s = "    <span> code <span> code <span/> code </span>";
Console.WriteLine(Regex.Replace(s, @"(?<=^'s*)'s", "&nbsp;"));

表示替换空白字符,但前提是只有空白字符和之前字符串的开头。

但所有其他语言都不支持可变长度的查找。

Ruby 中的一种方法
line.sub(/^( +)(?=<)/){'&nbsp;' * $1.length}

http://ideone.com/gVfPy

ruby中的双gsub:

str =  "    <span> code <span> code <span/> code </span>"
p str.gsub(/^ +/){|m| m.gsub(' ', '&nbsp;')}
#=> "&nbsp;&nbsp;&nbsp;&nbsp;<span> code <span> code <span/> code </span>"