开发者

Replace \n with <br /> [duplicate]

开发者 https://www.devze.com 2023-01-28 22:33 出处:网络
This question already has answers here: Why doesn't calling a string method (such as .replace) modify (mutate) the string? Why doesn't it change unless I assign the result?
This question already has answers here: Why doesn't calling a string method (such as .replace) modify (mutate) the string? Why doesn't it change unless I assign the result? 开发者_Go百科 (3 answers) Closed 6 months ago.

I'm parsing text from a file with Python. I have to replace all newlines with <br />. I tried this code:

thatLine.replace('\n', '<br />')
print thatLine

But I still see the text with newline after it. Why?


thatLine = thatLine.replace('\n', '<br />')

str.replace() returns a copy of the string, it doesn't modify the string you pass in.


Just for kicks, you could also do

mytext = "<br />".join(mytext.split("\n"))

to replace all newlines in a string with <br />.


For some reason using python3 I had to escape the "\"-sign

somestring.replace('\\n', '')

Hope this helps someone else!


To handle many newline delimiters, including character combinations like \r\n, use splitlines (see this related post) use the following:

'<br />'.join(thatLine.splitlines())


thatLine = thatLine.replace('\n', '<br />')

Strings in Python are immutable. You might need to recreate it with the assignment operator.


You could also have problems if the string has <, > or & chars in it, etc. Pass it to cgi.escape() to deal with those.

http://docs.python.org/library/cgi.html?highlight=cgi#cgi.escape


The Problem is When you denote '\n' in the replace() call , '\n' is treated as a String length=4 made out of ' \ n '
To get rid of this, use ascii notation. http://www.asciitable.com/

example:

newLine = chr(10)
thatLine=thatLine.replace(newLine , '<br />')

print(thatLine) #python3

print thatLine #python2 .


I know this is an old thread but I tried the suggested answers and unfortunately simply replacing line breaks with <br /> didn't do what I needed it to. It simply rendered them literally as text.

One solution would have been to disable autoescape like this: {% autoescape false %}{{ mystring }}{% endautoescape %} and this works fine but this is no good if you have user-provided content. So this was also not a solution for me.

So this is what I used:

In Python:

newvar = mystring.split('\n')

And then, passing newvar into my Jinja template:

{% for line in newvar %}
    <br />{{ line }}
{% endfor %}


If in case you are trying to replace the /n of a string to </br>, i am speculating that you want to parse line break in HTML view.

word-break: break-all,
white-space: pre-wrap;

Adding these to styles to parent div/container of the text will solve your problem without any string manipulations.


If you are wanting to do this using replace, and the
is not working for you (as was the case for me), you can use the following:

text_to_split = r'Hello\n\n I am a test.'
split_text = text_to_split.replace('\\n', '\n')

You first escape the \ in the sample text, and then by not escaping in the replacement text, it will generate a new line.

0

精彩评论

暂无评论...
验证码 换一张
取 消