我知道只匹配数字和空格,我可以使用:
re.match(r'[A-Za-z0-9 ]+$', word)
但我还要匹配()
,{}
,[]
等括号。我将上述正则表达式扩展为:
re.match(r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$', word)
但这不起作用。
任何想法是什么问题?或者我可以参考哪些简洁的正则表达式指南?
答案 0 :(得分:4)
r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$'
匹配定义模式的序列:
[A-Z]
- 大写ASCII字母[a-z]
- 小写ASCII字母[0-9]
- ASCII数字[ ]
- 空格[(]
- (
[)]
- )
[{]
- {
[}]
- }
[[]
- [
[]]
- ]
]+
- 一个或多个]
s(因为它是一个独立的量化原子)。$
- 字符串结束。您只需将它们添加到角色类:
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(){}\-\[\]^]