0

問題は、存在する場合、単語 (両側にスペース) を一致させようとしていることです。

私が(少なくともほとんど)作業しているコードは次のとおりです。

import re, os

str1 = "the host offered $ rec*ting advice"
str1 = re.sub('[*]', '(.*?)', str1)
str1 = re.sub('[$]', '(.*?)', str1)
str1 = str1.lower()
print str1
previous_dir = os.getcwd()
os.chdir('testfilefolder')
for filename in os.listdir('.'):
    with open(filename) as f:
        file_contents = f.read().lower()
    output = re.search("%s" % str1, file_contents)
    if output:
        print (" Match found in " + filename))

したがって、たとえば、文字列があり、その文字列"the host has offered some recruiting advice"を検索しても"the host offered some $ rec*ting advice" 機能しません-ドル記号が原因で(これはに置き換えられ(.*?)ます。興味深いことに、"the host offered $ rec*ting advice"「一部」がなくなっていることに注意してください。したがって、これは動作します - 存在する場合は 1 つの単語に一致できます -(.*?)は、各単語に少なくとも 1 つの文字が含まれる 1 つの文字に一致するはずなので、それが機能する理由だと思います。(.*?)使用するのが正しいかどうかはわかりませんしかし、それは私が研究の結果これまでに取り組んできた最高のものです. それについてのアドバイスは非常に高く評価されます. 上記(.*?)のテキストには、何らかの形で(.*?)何らかのタグがあり、文字列をフォーマットするだけであることが示されているように見えることに注意してください.の間(.*?)

ただし、0または1単語に一致させたいです。以前に \bs+\b に似たものを見つけたことがあります (よく思い出せず、もう一度見つけることもできません) が、とにかく動作させることができませんでした。\b は、単語が存在する可能性のある両側の空の文字列に一致することになっていることを知っています。

この質問が他の場所で尋ねられた場合はお詫びしますが、私が見つけたすべてのもの (私がまだ見つけて動作させることができたもの) は特定の単語を探しているようです - ただし、0 または 1 しか存在しないかどうかを確認しています:

Pythonを使用してテキストファイル内の単語を一致させるにはどうすればよいですか?

4

1 に答える 1

1

あなたの質問は非常に理解しにくいので、これはおそらくあなたが探しているものではないかもしれませんが、正しい方向に役立つかもしれません.

テキスト内のすべての単語を検索する場合は、次のようにします。

import re
str1 = "the host offered $ rec*ting advice"
re.findall(r'\b\S+\b',str1)

これにより、次が生成されます。

['the', 'host', 'offered', 'rec*ting', 'advice']

パターン内の\b-thing は、実際には文字に一致するのではなく、単語が開始または終了する文字列内の場所です (詳細については、http: //docs.python.org/2/library/re を参照してください)。

使用されている -definitionによると、ドル記号は単語文字ではないため、単語とは見なされません。\b

取得する単語がある場合に文字列の最初の単語を取得する場合は、次を使用できます。

re.findall(r'\b\S+\b',str1)[:1]

次に、0 個または 1 個の要素のリストを取得します。

于 2013-04-16T09:30:17.933 に答える