在我的表单中,我将可疑的import re
def convert(text):
x=re.match(r'([a-zA-Z]+) --> ([a-zA-Z]+) ([a-zA-Z]+)',text)
if x:
return (x.group(1),[x.group(2),x.group(3)])
else:
return False
convert("S --> NP VP")
内容复制到隐藏字段中,然后将其发送到数据库。
div
我在视图中呈现这样的数据
<%= form_for(@comment, remote: true) do |f| %>
<%= f.hidden_field :content, class: 'js-NewCommentContentShadow' %>
<div class="js-NewCommentContentField" contenteditable="true"></div>
<% end %>
问题是,按回车键输出此换行符
<div><%=raw comment.content %></div>
您可以连续添加多个换行符,这很好。但在某些时候,我想剥离所有连续的换行符,所以在文本之前或之后只允许一个换行符。
这可能发生在将满足的内容复制到影子输入,或者提交表单时,或者在某种程度上在视图中......我不挑剔。
以下是我想如何影响输出的一些示例:
此:
<div>
<br>
</div>
很好,应保持不变。
此:
Some text
<div>
<br>
</div>
Some more text
应改为
Some text
<div>
<br>
</div>
<div>
<br>
</div>
Some more text
此:
Some text
<div>
<br>
</div>
Some more text
应更改为:
Some text
<div>
<br>
</div>
<div>
<br>
</div>
<div>
<br>
</div>
答案 0 :(得分:1)
主要问题是comment.content
中的字符串包含不可打印的字符(特别是 unicode零宽度joiner 字符),因此字符串<div><br></div>
并不总是匹配因为这个不可见的字符。
要解决此问题,首先需要从字符串中删除这些字符,然后删除额外的<div><br></div>
次出现。
一种方法是使用gsub
和\p{Cf}
regex 1 并再次使用gsub
替换额外的<div><br></div>
,像这样:
comment.content.gsub(/\p{Cf}/, "").gsub(/(<div><br><\/div>)+/, "<div><br></div>")
#=> "Some text<div>Some more text</div><div><br></div>. Here is another Some text<div><br></div><div>Some text</div>"
要完全删除字符串末尾的所有<div><br></div>
次出现(示例3),您可以添加另一个gsub,从字符串末尾删除该子字符串,例如:
comment.content.gsub(/\p{Cf}/, "")
.gsub(/(<div><br><\/div>)+/, "<div><br></div>")
.gsub(/(<div><br><\/div>)+$/, "")
正则表达式中添加的$
代表字符串结尾。
1 \p{Cf}
代表&#39;其他:格式&#39; in Unicode字符的常规类别。 有关详细信息,请参阅Regexp class documentation。
答案 1 :(得分:-1)
你可以这样做:
=> "<div><br></div><br><div><br></div><br>"
输出
{2,}
基本上,匹配任意两次或多次 - ()
- 群组<br>
,<br>
,并替换<br>
。因此,选择<br>
重复出现的所有地方(不止一次)并替换单个white space
。
在您的实际情况中,您可能需要为line breaks
,TestContext
等添加容差