2013-04-07 18 views
15

私は、以下のシナリオのための正しい正規表現を見つけるのトラブルを抱えている:Pythonの正規表現マッチ全体単語

が言うことができます:

a = "this is a sample" 

は私が単語全体を一致させたい - 例えば、試合のために"hi"べきは単語ではなく、"is"は左と右辺にアルファベットがないのでTrueを返す必要があるため、Falseを返します。

+0

間違った投稿で重複して閉じられたため、この質問を再開しました。 –

答えて

23

the docsから

re.search(r'\bis\b', your_string) 

試してみてください:B \

は空の文字列にマッチしますが、唯一の単語の先頭や末尾。

reモジュールは、「英数字」は、ロケールまたはUnicodeオプションに依存し、「英数字の順序や文字をアンダースコア」として「単語」の素朴な定義を使用することに注意してください。

+2

ありがとう、私はフラグ= re.IGNORECASEを追加しました – user2161049

+1

これはword = "test"では機能しませんでした。 !それを壊す。 – user2161049

+0

このステートメントでは何が必要ですか?re.search(** r ** '\ bis \ b'、your_string)? – swordholder

-4

正規表現の問題は、別の文字列で検索したい文字列が正規表現文字を持っていると複雑になるということです。かっこ付きの文字列はすべて失敗します。

このコードは

word="is" 
    srchedStr="this is a sample" 
    if srchedStr.find(" "+word+" ") >=0 or \ 
     srchedStr.endswith(" "+word): 
     <do stuff> 

各側の空間と第二の部分とテキストのための条件検索の最初の部分が文字列の状況の終わりをキャッチ単語を検索します。 re.search()のドキュメントから

>>> x="this is a sample" 
>>> y="this isis a sample." 
>>> regex=re.compile(r"\bis\b") # For ignore case: re.compile(r"\bis\b", re.IGNORECASE) 
>>> regex.findall(y) 
[] 
>>> regex.findall(x) 
['is'] 

findは整数

+2

これは読みにくいです、編集してください。 – davejagoda

+1

また、すでに受け入れられている回答があることがわかります。回答を削除し、ダウンワードによる評判を回復したいと思うかもしれません。 – davejagoda

+0

@davejagodaは答えを削除することで評判を回復しますか? –

1

は正規表現で、この使用してワード境界を試してみて返すのに対し、ENDWITHがブール値であることに注意してください。

It matches the empty string, but only at the beginning or end of a word 

E.g. r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3' 

希望すると助かります!

関連する問題