只是为了学习我试图替换键盘中的所有特殊字符替换为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
替换字符串中的特殊字符答案 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____________|___________\__,__