【问题标题】:How to use re.search as an integer ? Python如何将 re.search 用作整数? Python
【发布时间】:2013-03-12 20:31:14
【问题描述】:

所以我有一个字符串

s = '>n269412 | AK142815 | msdfhakjfdkjfs'

我想包括所有内容,但不包括 '|' 的第一个实例

所以我做的是

import re

p = re.search('|',s)

print s[:p]

但我得到了这个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: slice indices must be integers or None or have an __index__ method

我明白为什么它不起作用。 .因为该值不是整数,但有什么方法可以在搜索找到该元素的地方使用该值?

【问题讨论】:

  • re.search 返回匹配对象或无,而不是整数。
  • p = s.find('|')p = s.index('|') 会更合适

标签: python string search


【解决方案1】:

为什么还要为这个用例使用正则表达式?

s = '>n269412 | AK142815 | msdfhakjfdkjfs'
print s.partition('|')[0]

【讨论】:

    【解决方案2】:

    你不需要正则表达式:

    first, rest = s.split('|', 1)
    

    【讨论】:

    • 请注意 - 不存在分隔符的地方 - 这将引发 ValueError
    【解决方案3】:

    我认为re.match() 提供了更直接的解决方案(即匹配所有内容,不包括第一个|):

    In [7]: re.match('[^|]*', s).group(0)
    Out[7]: '>n269412 '
    

    如果没有|,则返回整个字符串。这是否是您想要的问题并不完全清楚。

    但正如其他人所说,您实际上并不需要正则表达式...

    【讨论】:

      【解决方案4】:

      re.search 返回的a match object 包含更多而不是单个索引。

      您可能想要的是start 索引:

      >>> s[:p.start()]
      '>n269412 '
      

      顺便说一句。你需要修复你的正则表达式,因为它只会匹配''''(即什么都没有)。你想用'\|':

      p = re.search('\|', s)
      

      【讨论】:

        【解决方案5】:

        该错误是因为 re.search 返回了一个 MatchObject,您尝试对其进行切片但无法执行。请参阅re.search documentation

        我会做以下事情:

        s = '>n269412 | AK142815 | msdfhakjfdkjfs'
        
        # look for the pipe character
        findPipe = s.find("|")
        
        # replace everything after the pipe with empty string
        s = s.replace(s[findPipe:], "")
        
        print s
        

        请参阅these 两个links 了解有关切片字符串的更多信息。

        【讨论】:

          猜你喜欢
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-02
          • 1970-01-01
          • 2018-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多