Python使用正则表达式来匹配数字,字母,空格和括号中的字符

时间:2016-07-29 21:03:00

标签: python regex

我知道只匹配数字和空格,我可以使用:

re.match(r'[A-Za-z0-9 ]+$', word)

但我还要匹配(){}[]等括号。我将上述正则表达式扩展为:

re.match(r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$', word)

但这不起作用。

任何想法是什么问题?或者我可以参考哪些简洁的正则表达式指南?

2 个答案:

答案 0 :(得分:4)

r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$'匹配定义模式的序列

  • [A-Z] - 大写ASCII字母
  • [a-z] - 小写ASCII字母
  • [0-9] - ASCII数字
  • [ ] - 空格
  • [(] - (
  • [)] - )
  • [{] - {
  • [}] - }
  • [[] - [
  • []] - ]
  • ]+ - 一个或多个] s(因为它是一个独立的量化原子)。
  • $ - 字符串结束。

匹配Aa0 (){}[]]

之类的字符串

您只需将它们添加到角色类:

re.match(r'[A-Za-z0-9 (){}[\]]+$', word)
                      ^^^^^^^

请注意,(){}[不需要在字符类中进行转义。放在字符类start:

时,]不必转义
re.match(r'[][A-Za-z0-9 (){}]+$', word)

请参阅Python demo

答案 1 :(得分:0)

在非Java字符类中,唯一的特殊字符是转义\
短划线-,插入符^和右括号]

其中 -

  • 如果插入符号不在开头,那就是字面意思,
    在开头,它是一个否定。

  • 如果破折号位于开头或结尾,则为文字,
    在中间,它是一个范围运算符。

  • 如果闭合括号位于开头的插入符号的开头或右侧,则为 在某个地方没有关闭括号,它是一个未闭合的类,一个错误。

当你想到这一切时,你的头脑会爆炸。

保护自己,并遵循以下简单规则:

无论身在何处,都要逃避文字括号[] 无论身在何处,都要逃避文字破折号- 始终在所有其他角色的右侧放置一个文字插入符号^

没有其他东西需要逃脱。

示例:[a-z(){}\-\[\]^][^a-z(){}\-\[\]^]