2016-05-31 9 views
2

"a"文字を含まない文字列内の単語を検索しようとしています。私は以下のコードを書いたが、うまくいきません。正規表現に「含めない」とはどうすればいいですか? "^"記号を "not"として使用することはできませんか?Python Regexピッキング "単語を含まない"

import re 
string2 = "asfdba12312sssdr1 12şljş1 kf" 
t = re.findall(r'([^a]\w*) | \w*[^a] ', string2) 
print(t) 

そのコードの結果は、あなたがre.UNICODEフラグ付きで単語の境界で正規表現を使用する必要が"['sfdba12312sssdr1', '12şljş1']"

答えて

2

です:

r = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 

\W\bは、ユニコード意識するようになるだろう。

を参照してくださいregex demo

[^\Wa]は、任意のUnicode文字、数字またはinderscoreと一致しますが、ないa。大文字小文字を区別しないようにするには、re.Iフラグを追加します。

単語を数字にマッチさせたくない場合は、をcharクラスに追加してください:[^\W\da]

Python demoを参照してください:

# -*- coding: utf-8 -*- 
import re 
p = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 
s = u"asfdba12312sssdr1 12şljş1 kf" 
res = [x.encode('utf8') for x in p.findall(s)] 
print(res) 
+0

結果は "re.compile( '\\ b [^ \\ Wa] + \\ b')" – abidinberkay

1

[^a]は、単一の非a文字です。 [^a]\w*は、単一の非a文字とそれに続く任意の数の単語文字です。

最も簡単とPythonでこれを行うには、最も直感的な方法

は全く re.findallを使用していない...スペースが非 a文字であることに注意してください、と単語文字も aを含めることができます。

[word for word in string2.split() if not 'a' in word] 
+0

このコードは 'word1 'または' word2?! 'を単語として扱います(句読点と記号)。 –

+0

@WiktorStribiżew:良い点。あなたの例としてナンセンスを使用しないという利点をOPに示すことは、おそらく私が推測します。 – Amadan

+0

'rx = re.compile(r '\ b \ w + \ b'、re.UNICODE)'あなたは に行くことができます 'words = [rx.findall(string2)内の単語] '。 – Jan

関連する問題