2

我有这个正则表达式模式

r'^(?P<my_group>[-\w]+)'

这匹配

foo-barbar-foo

但我希望它只匹配以 'fo' 开头的字符串我如何为命名组执行此操作?

我试过了

r'^(?P<my_group>[[^fo]-\w]+)'
4

2 回答 2

4

您不要将它放在方括号(字符类)中,而是放在它们之外:

r'^(?P<my_group>fo[-\w]+)'

您当前的正则表达式匹配[[^fo](ie [^fo) 中的一个字符,后跟一个破折号、一个“单词字符”和一个或多个].

你可以在这个网站上测试你的正则表达式。

于 2013-09-26T10:06:20.950 回答
2

您应该使用fo[\w-]+而不是[[^fo]-\w]+. 你的角色课程有点混乱。在方括号内,您必须放置要匹配的字符(也可以作为间隔,如[a-z])。如果你想匹配-,最好将它放在字符类的末尾,以避免与间隔混淆(所以你应该写一些类似于[a-d-]匹配、、、abc东西d-。如果在字符类中您将 a^放在开头,您想要匹配所有未列出的字符,因此[^a-d-]将匹配除abc和. 之外d的所有字符-。请注意,在字符类之外,^表示字符串的开头。

于 2013-09-26T10:12:07.887 回答