0

だから私は文字列を持っています

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

機能しない理由がわかりました。. その値は整数ではないためですが、検索でその要素が見つかった場所でその値を使用できる方法はありますか?

4

5 に答える 5

5

このユースケースでわざわざ正規表現を使うのはなぜでしょうか?

s = '>n269412 | AK142815 | msdfhakjfdkjfs'
print s.partition('|')[0]
于 2013-03-12T20:36:06.553 に答える
3

これには正規表現は必要ありません。

first, rest = s.split('|', 1)
于 2013-03-12T20:36:34.927 に答える
2

re.match()より直接的な解決策が得られると思います(つまり、最初のものまですべてを一致させます|):

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

がない場合|は、文字列全体が返されます。これがあなたが望むものであるかどうかは、質問から完全には明らかではありません。

しかし、他の人が言ったように、これには正規表現は本当に必要ありません...

于 2013-03-12T20:35:06.830 に答える
0

re.search1つ以上のインデックスを含む一致オブジェクトを返します。

おそらく必要なのはstartインデックスです。

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

ところで。正規表現を修正する必要があります。これは、''または''(つまり、何も)に一致しないためです。あなたが使いたい'\|'

p = re.search('\|', s)
于 2013-03-12T20:37:55.320 に答える
0

このエラーは、re.searchがMatchObjectを返すためです。これは、スライスしようとしても実行できません。re.searchのドキュメントを参照してください。

私は次のことをします:

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

文字列のスライスの詳細については、これら2つのリンクを参照してください。

于 2013-03-12T20:39:04.310 に答える