繁体   English   中英

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

[英]Substitute leading spaces and terminate matching before particular character

无法弄清楚如何为以下内容建立替换模式。

我有以下几行:

<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个空格字符-应该将其替换为&nbsp; 如果有2个空格-应该为&nbsp;&nbsp; 基本上,N个空格字符应替换为N &nbsp;

我可以肯定地用代码做到这一点,但这不是最佳选择。 我试图纯粹使用正则表达式来做到这一点,但无法弄清楚如何构建适当的模式。

欢迎在任何语言(Ruby,C#,Python,Perl)上进行此替换的示例。

PS我正在逐行处理,因此足以构建替换模式,该模式将在单个行的边界内工作。

PPS我是向前看符号足够接近,但还是无法弄清楚如何先停后更换的空间<

在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

红宝石中的双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>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM