我有这个正则表达式模式
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的所有字符-。请注意,在字符类之外,^表示字符串的开头。