2016-05-20 6 views
1

文字列の中に "water"という単語を見つける必要があるとしましょう。この単語は別の単語の一部にすることはできません。句読点を前に付けることはできません(したがって、 ""または文字列の先頭に置くことが前提です)。 単語の最初の文字 "w"のインデックスを返す必要があります。そのs.start()は常に「W」のcharのインデックスを返しますので、パターンの一部|(\ A)Python Regex - Match and Start()

import re 
s = re.search(r"(\A|)\bwater\b", "Need water") 
return s.start() # This returns the index of the char " " :(

それはを無視することは可能です:だから私はこのコードをしようとしていますか?あるいは私はこれを間違って考えていますか?

+0

てみ '\ bwater \ B' –

答えて

2

あなたは

(?<!\S)\bwater\b 

regex demo

説明を参照してください使用することができます: - 失敗否定後読み

  • (?<!\S)をあなたは単語の境界を確認し、既に適用されてきました非空白の場合は一致文字の直前の文字water
  • \bwater\b - 全体の単語water。ここで

Python demoです:

import re 
s = re.search(r"(?<!\S)\bwater\b", "Need water") 
if s: 
    print(s.start()) 
+1

それは絶対に正しいです!どうもありがとうございます! \ Sが前にない場合は、文字列と一致します。また、負のlookbehindはstart()では考慮されません –

0

正規表現は必要ありません。ただ、あなたにスペースがであることを文字を取得しますスペースと言葉を一致させるが、あなたはあなたが持っている必要はありません1

bigString = "I drink water" 

if " " not in bigString: 
    print(bigString.find("water")) 
else: 
    print(bigString.find(" water")+1) 
1

最初の文字はそう追加したい「という文字列の先頭またはスペースチェック。

>>> s = re.search(r"\bwater\b", "Need water") 
>>> s.start() 
5 
>>> s = re.search(r"\bwater\b", "water is needed") 
>>> s.start() 
0 
+0

こんにちは、応答に感謝します(<\ S?!)。残念ながら、私は "水"のようなケースにマッチさせたくありません。私はそれが任意の文字( ""のみ)の前にあることを望んでいません。 –