我尝试将html实体替换为空格,并在{{和}}
出现之间留出实际空格示例示例
"this is a gap {{ for user in users }}" =>
"this is a gap {{ for user in users }}"
我找到了类似的答案,这些答案让我写了这样的东西(它不起作用)
.gsub(/(?<=\{\{).*( ?).*(?=\}\})/,' ')
对此类正则表达式的任何帮助都将不胜感激!
答案 0 :(得分:2)
您可以使用我同意的复杂正则表达式执行此操作,但我发现使用嵌套替换更简单。首先使用gsub查找括号中的子串,然后使用另一个替换实体。
string = 'this is a gap {{ for user in users }}'
result = string.gsub(/{{.*?}}/){ |s| s.gsub(/ /, ' ') }
# => "this is a gap {{ for user in users }}"
答案 1 :(得分:0)
使用\K
和\G
这有点棘手,但在Ruby 2.0+中,由于\K
和\G
令牌,我们可以使用紧凑的正则表达式来完成它。使用此正则表达式并替换为空格:
[^{}]*\K(?:{{|\G).*?\K (?=[^{]*})
请参阅demo。
在Ruby中:
result = subject.gsub(/[^{}]*\K(?:{{|\G).*?\K (?=[^{]*})/, ' ')
<强>解释强>
[^{}]*
匹配任何非大括号的字符\K
告诉引擎放弃匹配的内容(?:{{|\G)
要么与开场曲线相匹配,要么断言我们在最后一场比赛后定位.*?\K
懒惰地匹配字符(并删除它们),最多......
我们的比赛!(?=[^{]*})
所断言的那样,在遇到一个大括号之前,必须跟着任何不是开口大括号的字符