私はこのような文字列を持っています
"quick" "brown" fox jumps "over" "the" lazy dog
二重引用符で囲まれていない単語を検出するには、正規表現が必要です。いくつかのランダムな試みの後、私はこれを見つけました("([^"]+)")
。これは、二重引用符で囲まれた文字列を検出します。しかし、私は反対が欲しいです。上記の正規表現を逆にしようとしても、私は本当にそれを思い付くことができません。私は正規表現がかなり弱いです。私を助けてください
私はこのような文字列を持っています
"quick" "brown" fox jumps "over" "the" lazy dog
二重引用符で囲まれていない単語を検出するには、正規表現が必要です。いくつかのランダムな試みの後、私はこれを見つけました("([^"]+)")
。これは、二重引用符で囲まれた文字列を検出します。しかし、私は反対が欲しいです。上記の正規表現を逆にしようとしても、私は本当にそれを思い付くことができません。私は正規表現がかなり弱いです。私を助けてください
先読み/後読みアサーションを使用します。
(?<![\S"])([^"\s]+)(?![\S"])
例:
>>> import re
>>> a='"quick" "brown" fox jumps "over" "the" lazy dog'
>>> print re.findall('(?<![\S"])([^"\s]+)(?![\S"])',a)
['fox', 'jumps', 'lazy', 'dog']
ここでの主なものは、先読み/後読みアサーションです。あなたは言うことができます:私は表現の前にこのシンボルが欲しいのですが、それが試合自体の一部になることを望んでいません。Ok。そのためには、アサーションを使用します。
(?<![\S"])abc
それはネガティブな裏返しです。つまり、必要ですが、その前abc
がないということは、スペース以外の文字(単語の先頭)またはその前があってはならないことを意味します。[\S"]
"
それは同じですが、反対方向です。
abc(?![\S"])
それはネガティブな先読みです。それはあなたが望むabc
がそれの[\S"]
後にはないことを意味します。
一般に、このタイプの4つの異なるアサーションがあります。
(?=pattern)
is a positive look-ahead assertion
(?!pattern)
is a negative look-ahead assertion
(?<=pattern)
is a positive look-behind assertion
(?<!pattern)
is a negative look-behind assertion
この正規表現を使用します。
\s+(?<myword>([^\"\s]+)*)\s+
これはうまくいくはずです。mywordという名前のグループを取得します。それ以外の場合は、結果文字列をトリミングする必要があります。
文字列から最初の引用符を削除します