【问题标题】:Regular expression to match an empty string?正则表达式匹配一个空字符串?
【发布时间】:2014-04-16 18:09:52
【问题描述】:

我想匹配和分组这些列出的任何单词:

aboutus/,race/,cruise/,westerlies/,weather/,reach/,gear/empty_string

这是一个解决方案,但它与空字符串不匹配:

^(aboutus|race|cruise|westerlies|weather|reach|gear)/$

所以我的问题是:如何在此匹配中包含空字符串?

我仍然没有找到一个好的解决方案。

所以我专门为empty_string添加了一个正则表达式:即^$

注意:这些正则表达式适用于 django urls.py

更新:如果捕获组不包含/会更好

【问题讨论】:

  • ^(aboutus|race|cruise|westerlies|weather|reach|gear|)/$ 不行吗?
  • ^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$怎么样
  • 空字符串后面还会跟/吗?
  • @njzk2 没有。它不会工作。
  • @Drewness no /。空字符串是纯空的。我在django urls.py中使用它,所以它类似于^$

标签: python regex django django-urls


【解决方案1】:

试试这个:

^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$

编辑: 如果 '/' 在所有情况下都存在,除了空字符串试试这个

^((aboutus|race|cruise|westerlies|weather|reach|gear)(/))?$

【讨论】:

  • 这是最正确的解决方案。 ? 表示 0 或 1 次出现,这正是 OP 的目标。
  • 抱歉aboutus/ 是必需的。我更新了问题。但空字符串纯粹是空的
  • 然后试试这个^(aboutus/|race/|cruise/|westerlies/|weather/|reach/|gear/)?$
  • @omair_77 感谢 omar ? 真的帮了我很多... :)
  • 你的意思是(?<=^aboutus\/)(?:race|cruise|westerlies|weather|reach|gear)?$?这将捕获“aboutus/”之后的任何内容,包括任何内容。
【解决方案2】:

使用这个

^$|^(aboutus|race|cruise|westerlies|weather|reach|gear)/$

【讨论】:

  • 非常感谢,这正是我要找的
  • 最好把^$放在最后,就像...gear)/$|^$那样,因为我想在大多数情况下,被测试的字符串不会为空,那么如果^$排在第二位,第一部分的交替将立即产生良好的结果; ^$ 部分不会在每个测试字符串上进行验证。
【解决方案3】:

您可以将捕获组设为可选:

^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$

【讨论】:

    【解决方案4】:
    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
    ''                   ''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多