匹配空字符串的正则表达式?

4 投票
4 回答
9798 浏览
提问于 2025-04-17 21:57

我想要匹配并分组以下这些单词:

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)/$

撰写回答