keep-loving-pythonのブログ

Pythonを愛し続けたいです(Pythonが流行っている限りですが。。。)

解決策。re.error: bad escape \s at position 0とか \z とか \p

解決策。re.error: bad escape \s at position 0とか \z とか \p

エラー

エラーの内容

re.error: bad escape \s at position 0
re.error: bad escape \z at position 0
re.error: bad escape \p at position 0

エラー詳細

Traceback (most recent call last):
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 1021, in parse_template
    this = chr(ESCAPES[this][1])
KeyError: '\\p'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "re00.py", line 38, in <module>
    b = re.sub('y','\\p',a)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 192, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 309, in _subx
    template = _compile_repl(template, pattern)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 300, in _compile_repl
    return sre_parse.parse_template(repl, pattern)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 1024, in parse_template
    raise s.error('bad escape %s' % this, len(this))
re.error: bad escape \p at position 0

環境

Python 3.7.2(windows10)

解決策

r と \ を加える。

b = re.sub('y',r'\\s',a)

補足

subの最初の引数側は、セーフ。(わけわからんというか、他の解説参照。)

b = re.sub('\s','y',a)

補足2

エラーとエラー対応後の様子を示すサンプルです。

import re

r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\s',a)
print(b)
# re.error: bad escape \s at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\s',a)
print(b)
# x\szopqstu\x\\s\z\o\p\q\s\t


r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\z',a)
print(b)
# re.error: bad escape \z at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\z',a)
print(b)
# x\zzopqstu\x\\z\z\o\p\q\s\t



r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\p',a)
print(b)
# re.error: bad escape \p at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\p',a)
print(b)
# x\pzopqstu\x\\p\z\o\p\q\s\t

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('\s','y',a)
print(b)
# xyzopqstu\x\y\z\o\p\q\s\t(こっちはセーフ)


補足3(2023/04/02)

↓このコードでエラー。

template_regex = re.sub(r'\\ +', r'\s+', template_regex)

エラー。↓

re.error: bad escape \s at position 0

これ↓でOK

template_regex = re.sub(r'\\ +', r'\\s+', template_regex)

補足(2023/09/10)

多少、この件、解読できたので、、、記事を書きました!!

keep-loving-python.hatenablog.com

コメント

アドバイスあれば、お願いします。
自分でコメントですが。。。この解決策の説明、良!