我一直在寻找一种方法来隔离正则表达式中的特殊字符,但我似乎只能找到与我正在寻找的完全相反的方法。所以基本上我想要的是这样的:
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"""[(){}\[\]"'\-]"""
答案 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解释反斜杠。