1

1行で: 文字列が与えられた場合、どうすればその生の文字列表現を取得できますか?


'[ \\n\\t\\r\\f\\v]'生の文字列としてレンダリングしたい正規表現を含むファイルを生成しています。これはどのように達成できますか?

PS: 実際には文字列も二重引用符で表すつもりなので、文字列'\''は としてレンダリングされ"'"ます。私もそれについて助けが必要..

「生の文字列」とは、正規表現でよく使用する文字列のタイプを意味します。

>>> r"[ \r\n\f\v\t]"
'[ \\r\\n\\f\\v\\t]'
# assuming to_raw is the function
>>> print to_raw(r"[ \r\n\f\v\t]")
r'[ \r\n\f\v\t]'
>>> print to_raw("\\\\")
r'\\'
>>> print to_raw("'")
r"'"
4

2 に答える 2

3

文字列が生の文字列から派生したものである場合は、ソース コードのr''r""r''''''、または内に表示さr""""""れ、その他の特別なエスケープはありません。それらの1つが機能します:

import ast

def rawstringify(s):
    for format in ["r'{}'", 'r"{}"', "r'''{}'''", 'r"""{}"""']:
        rawstring = format.format(s)
        try:
            reparsed = ast.literal_eval(rawstring)
            if reparsed == s:
                return rawstring
        except SyntaxError:
            pass
    raise ValueError('rawstringify received an invalid raw string')

デモ:

>>> print rawstringify(r'')
r''
>>> print rawstringify(r'\n\r\b\t')
r'\n\r\b\t'
>>> print rawstringify(r"'")
r"'"
>>> print rawstringify(r'\
... ')
r'\
'
>>> print rawstringify(r'''asdf
... ''')
r'''asdf
'''
>>> print rawstringify('\\')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in rawstringify
ValueError: rawstringify received an invalid raw string
于 2013-12-16T10:28:48.390 に答える
1

1 行で: 文字列が与えられた場合、どうすればその生の文字列表現を取得できますか?

生の文字列は、特別なシーケンスを単純にエスケープします。

>>> s
'This is some string \n that is not \raw'
>>> print(s)
This is some string
awhat is not
>>> i = s.encode('string_escape')
>>> i
'This is some string \\n that is not \\raw'
>>> print(i)
This is some string \n that is not \raw
>>> i == r'This is some string \n that is not \raw'
True
>>> i == s
False
于 2013-08-29T11:37:11.910 に答える