我有这个正则表达式
r'^(?P<my_group>[-\w]+)'
匹配
foo-bar
和bar-foo
但我希望它只匹配以'fo'开头的字符串如何为命名组执行此操作?
我试过
r'^(?P<my_group>[[^fo]-\w]+)'
答案 0 :(得分:4)
你不要把它放在方括号(字符类)中,但在它们之外:
r'^(?P<my_group>fo[-\w]+)'
您当前的正则表达式匹配[[^fo]
中的一个字符(即[^fo
),后跟短划线,“单词字符”和一个或多个]
。
您可以在this website上测试您的正则表达式。
答案 1 :(得分:2)
您应该使用fo[\w-]+
代替[[^fo]-\w]+
。
你的角色课搞得一团糟。在方括号内,你必须放置你想要匹配的字符(也作为间隔,如[a-z]
)。如果你想匹配-
,最好把它放在字符类的末尾,以避免与间隔混淆(所以你应该写[a-d-]
之类的东西来匹配{{1} },a
,b
,c
和d
)。
如果在字符类中您在开头添加-
,则需要匹配未列出的所有字符,因此^
将匹配除[^a-d-]
之外的所有字符,a
,b
,c
和d
。
请注意,在字符类之外,-
表示字符串的开头。