Simple question - end a raw string with a single backslash ?
Peter J. Holzer
hjp-python at hjp.at
Sun Oct 18 10:13:16 EDT 2020
On 2020-10-17 21:03:26 -0000, Mladen Gogala via Python-list wrote:
> On Thu, 15 Oct 2020 21:30:15 +0000, Stefan Ram wrote:
> > Tony Flury <tony.flury at btinternet.com> writes:
> >> >>> a = r'end' + chr(92)
> >
> > Or maybe,
> >
> > a = r'''
> > end\
> > '''[ 1: -1 ]
> >
> > ? The first and the last line are messy, but in the middle,
> > the intended string is clearly visible.
>
>
> You can use perl module for python.
Ah, I see, that the sillyness of Perl's grammar-altering modules (which
let you write Perl in Latin (with proper declensions and conjugations,
of course) or Chinese) has found its way to Python :-)
> It is installable by pip.
> Perl has no problems with handling backslashes.
>
> https://pypi.org/project/perl/
>
> What you need is something like this:
>
> mgogala at umajor:~$ perl -e '$a="abcd";$a=~s/$/\\/; print "$a\n";'
> abcd\
>
> Python has a problem with backslashes:
>
> Python 3.8.5 (default, Jul 28 2020, 12:59:40)
> [GCC 9.3.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import re
> >>> a="abcd"
> >>> b=re.sub('$',chr(28),a)
> >>> b
> 'abcd\x1c'
>
> >>> b=re.sub('$',chr(0x41),a)
> >>> b
> 'abcdA'
> >>> b=re.sub('$','Z',a)
> >>> b
> 'abcdZ'
> >>> b=re.sub('$',chr(0x1C),a)
> >>> b
> 'abcd\x1c'
> >>>
>
> Any other character is shown as it should be, except backslash.
0x1C isn't a backslash, it's a control character (FS - File Separator).
0x5C is a backslash, but of course that doesn't work here either,
because the second argument to re.sub isn't a simple string: It contains
escape sequences to be interpreted, and a single \ isn't well-formed
(note that you doubled the \ in your Perl example, too).
b=re.sub('$', '\\\\', a)
or
b=re.sub('$', chr(0x5C)+chr(0x5C), a)
works just fine, as does
b = a + chr(0x5C)
In all these cases,
print(b)
prints
abcd\
(with a single backslash at the end)
But simply typing "b" at the REPL produces
'abcd\\'
because prints the __repr__() of an object. Note that it also prints
single quotes, which are also not part of the string.
hp
--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp at hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://mail.python.org/pipermail/python-list/attachments/20201018/8546185f/attachment.sig>
More information about the Python-list
mailing list