2016-08-15 5 views
0
word = 'laugh'  
string = 'This is laughing laugh' 
index = string.find (word) 

インデックスが8である必要があります。 私は懸命に見回しましたが、答えを見つけることができませんでした。Pythonで文字列内の正確な単語のインデックスを見つける方法

+0

Pythonの新機能は、私がまだこれを解決するには複雑すぎます! – Khan

+0

「文字列で単語を見つける方法」を検索すると、このサイトで194の質問が見つかりました。それらの答えのどれもが役に立たなかったとあなたは言っていますか? –

+0

8が正解ですが、['find'](https://docs.python.org/2/library/string.html#string.find)は最初に一致する部分文字列の開始位置を返します – miraculixx

答えて

0

コード内の文字列はスペースで区切られません。スペースを探したい場合は、検索する単語にスペースを含める必要があります。その後、反復あなたは、単語に文字列を分割することは実際にはより効率的であるかもしれません例えば:

あなたがインデックスに現在の単語の長さを追加することができます反復したよう
str = "This is a laughing laugh" 
strList = str.split(" ") 
for sWord in strList: 
    if sWord == "laugh": 
     DoStuff() 

とするとき、あなたが単語を見つけますループから切り離す。スペースを忘れないでください!

+0

単語が文字列にある場合、そのインデックスを知りたい。 – Khan

+0

私は悪いです、反復するごとに各単語の長さを追加することができます。おそらく正規表現の方法より効率が悪いですが、私は可能な限りPythonで正規表現を避けようとしています。スクリプト言語として見ていて、実行可能なものを読みやすくするためのものです。 – XtrmJosh

7

findは、の最初にオカレンスを返しますので、正規表現(単語境界付き)を使用する必要があります。 matchオブジェクトのstart属性を使用して開始インデックスを取得します。

import re 

string = 'This is laughing laugh' 

a = re.search(r'\b(laugh)\b', string) 
print(a.start()) 
>> 17 

詳細については、hereを参照してください。ここ

+0

素晴らしい! re式で変数を使用する方法を教えてください。つまり、(笑)の代わりにwordを使用したいのですか? – Khan

+1

@Khan Pythonの文字列と同じように。 'concatまたは'を使うことができます。形式 '、すなわち' word = '笑い'; re.parch(r '\ b%s \ b'%word、re.I)これはうまくいきました:re.search(r '\ b({})\ b'.format(word)、string) ' – DeepSpace

+0

なぜre.search(r '\ b({})\ b'。形式(単語)、文字列)しなかった... – Khan

0

は、正規表現なしの一つのアプローチは、次のとおり

word = 'laugh'  
string = 'This is laughing laugh' 
words = string.split(' ') 
word_index = words.index(word) 
index = sum(len(x) + 1 for i, x in enumerate(words) 
      if i < word_index) 
=> 17 

これは、単語内の文字列を分割し、マッチング単語のインデックスを検索し、前にすべての単語の区切りとして、長さおよびブランクチャーを合計しますそれ。

もちろん、パフォーマンスと利便性のために正規表現を使用する必要があります。次のようreモジュールは使用して同等:

r = re.compile(r'\b%s\b' % word, re.I) 
m = r.search(string) 
index = m.start() 

ここ\breマニュアルを参照して、ワード境界を意味します。正規表現はかなり難しいことがあります。

word = 'laugh'  
string = 'This is laughing laugh'.split(" ") 
index = string.index(word) 

は、これはすべての単語を含むリストを作成し、その後、関連する単語を検索:テストし、正規表現を見つけるための素晴らしい方法は、この試すregex101.com

+0

downvoteあなたが好きなのですが、私は答えを改善できるようにコメントを追加してください。 – miraculixx

+0

r = re.compile(r '\ b%s \ b'%word、re.I)は魅力的に働いた。あなたの完全なソリューションも機能します!どうもありがとう! – Khan

+0

downvoteの理由は、この回答(両方の部分)がすでに非常に似た形で存在していることです。 – XtrmJosh

0

を使用しています。その後、私はあなたがインデックスより少ないリスト内の要素の長さのすべてを追加し、道

索引
position = 0 
for i,word in enumerate(string): 
    position += (1 + len(word)) 
    if i>=index: 
     break 

print position 

・ホープこのことができますを見つけることができると思います。

関連する問題