在python中使用正则表达式替换特殊字符

时间:2017-11-14 21:00:52

标签: python regex

只是为了学习我试图替换键盘中的所有特殊字符替换为underscore'_'

List of characters= ~!@#$%^&*()+|}{:"?><-=[]\;',./

string I created:

table = """123~!@#$%^&*()+|}{:"?><-=[]\;',./"""

import re

table1= re.sub(r'!~@#$%^&*()-+={}[]:;<.>?/\'"', '_', table)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "/usr/lib64/python2.7/re.py", line 242, in _compile
    raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression

无法执行此操作我收到上述错误。

如何使用regex

替换字符串中的特殊字符

2 个答案:

答案 0 :(得分:2)

您可以使用re.escape来转义字符串中的所有特殊正则表达式字符,然后将转义后的字符串括在[...]中,以便它们匹配其中任何字符。

>>> re.sub("[%s]" % re.escape('!~@#$%^&*()-+={}[]:;<.>?/\''), '_', table)
'123____________|___"_______\\__,__'

但是,由于您并未真正将该正则表达式用作正则表达式,因此您可以只检查每个字符是否在该字符串中:

>>>''.join("_" if c in '!~@#$%^&*()-+={}[]:;<.>?/\'' else c for c in table)
'123____________|___"_______\\__,__'

或者为了使查找更快一些,首先从该字符串中的字符创建set

>>> bad_chars = set('!~@#$%^&*()-+={}[]:;<.>?/\'')
>>> ''.join("_" if c in bad_chars else c for c in table)

答案 1 :(得分:1)

将它放在一个字符类中并重新排列某些字符的位置(即-,转义+):

import re
table = """123~!@#$%^&*()+|}{:"?><-=[]\;',./"""

table1 = re.sub(r'[-\+!~@#$%^&*()={}\[\]:;<.>?/\'"]', '_', table)
print(table1)
# 123____________|___________\__,__