正则表达式匹配包含特殊字符的字母数字字符串

1 投票
2 回答
3757 浏览
提问于 2025-04-18 02:55

我正在尝试在Django的URL模式中形成一个网址。

   url(r'^reports/(?P<bu>\w+|\W)/$', \
                LrsReportView.as_view(), name="elearning.lrsreports.region"),  

这个网址的部分可以是字符串,或者是字母和数字的组合,或者是带有特殊字符的字母数字组合(除了/以外的字符)。

但是上面的网址出现了错误,具体是

NoReverseMatch: Reverse for 'elearning.lrsreports.region' with arguments '(u'Lawn&Garden',)' and keyword arguments '{}' not found.

从错误信息中我明白了,这个正则表达式不接受包含特殊字符的字符串。

请帮我看看这里可能有什么问题。

2 个回答

0

试试这个-

/^(?=.[a-z])(?=.[A-Z])(?=.\d)(?=.(_|[^\w])).+$/

2

你现在的正则表达式可以匹配:

  • 一个或多个字母、数字和/或下划线的字符串:[A-Za-z0-9_]+

或者

  • 一个单独的字符,但这个字符不能是字母、数字或下划线:[ ^A-Za-z0-9_]

你可能需要的是更像下面这样的:

(?P<bu>[\w-]+)

这个表达式可以匹配字母、数字、下划线和连字符。如果你想添加其他特殊字符,也可以把它们放在方括号里。记得有些字符在前面需要加个\来转义哦。

撰写回答