我有这个正则表达式模式
r'^(?P<my_group>[-\w]+)'
这匹配
foo-bar
和bar-foo
但我希望它只匹配以 'fo' 开头的字符串我如何为命名组执行此操作?
我试过了
r'^(?P<my_group>[[^fo]-\w]+)'
您不要将它放在方括号(字符类)中,而是放在它们之外:
r'^(?P<my_group>fo[-\w]+)'
您当前的正则表达式匹配[[^fo]
(ie [^fo
) 中的一个字符,后跟一个破折号、一个“单词字符”和一个或多个]
.
你可以在这个网站上测试你的正则表达式。
您应该使用fo[\w-]+
而不是[[^fo]-\w]+
. 你的角色课程有点混乱。在方括号内,您必须放置要匹配的字符(也可以作为间隔,如[a-z]
)。如果你想匹配-
,最好将它放在字符类的末尾,以避免与间隔混淆(所以你应该写一些类似于[a-d-]
匹配、、、a
和b
的c
东西d
)-
。如果在字符类中您将 a^
放在开头,您想要匹配所有未列出的字符,因此[^a-d-]
将匹配除a
、b
、c
和. 之外d
的所有字符-
。请注意,在字符类之外,^
表示字符串的开头。