关于字符串:如何将re.search用作整数?

How to use re.search as an integer ? Python

所以我有一根绳子

1
s = '>n269412 | AK142815 | msdfhakjfdkjfs'

我想包括但不包括""的第一个实例

所以我做的是

1
2
3
4
5
import re

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

print s[:p]

但我犯了这个错误

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

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


为什么还要为这个用例使用regex?

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


您不需要正则表达式:

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


我认为re.match()给出了一个更直接的解决方案(也就是说,把所有东西都匹配起来,不包括第一个|

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

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

但正如其他人所说,你不需要一个正则表达式…


该错误是因为re.search返回一个matchObject,您试图对其进行切片,但无法执行。请参阅re.search文档。

我将执行以下操作:

1
2
3
4
5
6
7
8
9
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

有关分割字符串的详细信息,请参见这两个链接。


re.search返回一个match对象,该对象只包含一个索引。

你可能想要的是start指数:

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

顺便说一句,您需要修正正则表达式,因为它只与''''匹配(即不匹配)。您要使用'\|'

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