python regex仅保留指定的特殊字符

时间:2016-07-11 16:47:35

标签: python regex

我一直在寻找一种方法来隔离正则表达式中的特殊字符,但我似乎只能找到与我正在寻找的完全相反的方法。所以基本上我想要的是这样的:

import re
str = "I only want characters from the pattern below to appear in a list ()[]' including quotations"

pattern = """(){}[]"'-"""
result = re.findall(pattern, str)

我对此的期望是:

print(result)
#["(", ")", "[", "]", "'"]

修改:谢谢你的回答,然后用这个解决我问题的正则表达式删除了他们的评论:

pattern = r"""[(){}\[\]"'\-]"""

3 个答案:

答案 0 :(得分:0)

为什么在没有正则表达式的情况下才能使用正则表达式?

>>> str = "I only want characters from the pattern below to appear in a list ()[]' including quotations"
>>> pattern = """(){}[]"'-"""
>>> [x for x in str if x in pattern]
['(', ')', '[', ']', "'"]

答案 1 :(得分:0)

如果是出于学习目的(正则表达式并不是最好的方式),那么您可以使用:

import re

text = "I only want characters from the pattern below to appear in a list ()[]' including quotations"
output = re.findall('[' + re.escape("""(){}[]"'-""") + ']', text) 
# ['(', ')', '[', ']', "'"]

围绕[]中的字符使其成为正则表达式字符类,re.escape将转义任何具有特殊正则表达式的字符,以避免破坏正则表达式字符串(例如:{{ 1}}在某个地方提前终止字符或],使其像字符范围一样行事。)

答案 2 :(得分:0)

集合中的几个字符在正则表达式中具有特殊含义;要按字面意思匹配它们,你需要反斜杠 - 逃避它们。

pattern = r"""\(\)\{\}\[]"'-"""

或者,您可以使用字符类:

pattern = """[]-[(){}"']"""

还要注意使用"原始字符串" r'...'以避免Python解释反斜杠。