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.
精彩评论