2017-02-13 23 views
0

私は、Python内部の文字列中の部分文字列の出現数を見出そうとしています。しかし、私は私の検索が非常に具体的であることが必要です。Pythonは文字列内の部分文字列を見つける

myString.translate(なし、string.punctuation)

は、今私は、サブストリングを検索:部分文字列を検索する前に、私はすべての句読点を削除します。私が部分文字列 "hello bob"を探していて、私が探している文字列の中にテキスト "hello bob-something else"または "hello bob"というテキストがあります。 2つの文字 'は - ユニコード以外の文字であるため、句読点を削除すると削除されません。その結果、上記の2つの文字列は "hello bob"という単語の出現として数えてはなりません。

私は大きなファイル(3000行以上)で、私は単語の出現

counter = 0 
searcher = re.compile("hello bob" + r'([^\w-]|$)').search 
with open(myFile, 'r') as source: 
    for line in source: 
     if searcher(line): 
      counter += 1 

何か他のものの正確な数を取得していない開始、出現の正確な量を取得しようとする正規表現コードの下に使用私は試しました

私は今まで私が入力した単語の正しい出現回数を与えているので、findAll関数を使用しようとしています。

私はStackOverflowの上でこれを見つけた:

re.findall(r'\bword\b', read)

は、私が代わりに単語の変数を使用することができますとにかくありますか?例えば

私が使用したい:

と同じでなければなりません
myPhrase = "hello bob" 
re.findall(r'\bmyPhrase\b', read) 

:あなたが問題を解決するために、次のトリックを使って補間した文字列を実行することができ

re.findall(r'\bhello bob\b', read) 
+0

入力例と出力例を示します。 –

+0

re.findAll()の情報を調べる – TallChuck

+0

@ juanpa.arrivillaga上記のコードはほとんどの場合は動作しますが、大きい(3000行以上)のテクスチャファイルでは失敗するので、これは非常に難しいでしょう。 – memoryManagers

答えて

1

myphrase = "hello bob" 
pattern = r'\b{var}\b'.format(var = myphrase) 
+0

これは完璧に感謝しました – memoryManagers

+0

@memoryManagersようこそ! :D – Prerit

0

可変置換にはre.escape(myPhrase)を使用できます。

read = "hello bob ! how are you?" 
myPhrase = "hello bob" 
my_regex = r"\b" + re.escape(myPhrase) + r"\b" 

counter = 0 
if re.search(my_regex, read, re.IGNORECASE): 
    counter += 1 
else: 
    print "not found" 
関連する問題