匹配空字符串的正则表达式?
我想要匹配并分组以下这些单词:
aboutus/、race/、cruise/、westerlies/、weather/、reach/、gear/ 或者 empty_string
这里有一个解决方案,但它不会匹配 empty_string:
^(aboutus|race|cruise|westerlies|weather|reach|gear)/$
所以我想问的是:怎么才能把空字符串也包含在匹配中呢?
我还是没有找到一个好的解决办法。
于是我特别为空字符串添加了一个正则表达式:也就是 ^$。
注意:这些正则表达式是用于 Django 的 urls.py 文件。
更新:如果捕获组不包含 / 会更好。
相关问题:
4 个回答
0
import re
rgx = re.compile('^((aboutus|race|cruise|westerlies'
'|weather|reach|gear)/|)$')
# or
li = ['aboutus','race','cruise','westerlies',
'weather','reach','gear']
rgx = re.compile('^((%s)/|)$' % '|'.join(li))
for s in ('aboutus/',
'westerlies/',
'westerlies/ ',
''):
m = rgx.search(s)
print '%-21r%r' % (s,rgx.search(s).group() if m else m)
'aboutus/' 'aboutus/'
'westerlies/' 'westerlies/'
'westerlies/ ' None
'' ''
结果
1
你可以让这个捕获组变成可选的:
^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$
8
试试这个:
^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$
补充说明:
如果每种情况都有'/',除了空字符串,那就试试这个:
^((aboutus|race|cruise|westerlies|weather|reach|gear)(/))?$
7
使用这个
^$|^(aboutus|race|cruise|westerlies|weather|reach|gear)/$