12

私はこのような文字列を持っています

"quick" "brown" fox jumps "over" "the" lazy dog

二重引用符で囲まれていない単語を検出するには、正規表現が必要です。いくつかのランダムな試みの後、私はこれを見つけました("([^"]+)")。これは、二重引用符で囲まれた文字列を検出します。しかし、私は反対が欲しいです。上記の正規表現を逆にしようとしても、私は本当にそれを思い付くことができません。私は正規表現がかなり弱いです。私を助けてください

4

3 に答える 3

32

先読み/後読みアサーションを使用します。

(?<![\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 
于 2012-07-04T08:05:20.343 に答える
0

この正規表現を使用します。

\s+(?<myword>([^\"\s]+)*)\s+

これはうまくいくはずです。mywordという名前のグループを取得します。それ以外の場合は、結果文字列をトリミングする必要があります。

于 2012-07-04T08:03:15.417 に答える
-3

文字列から最初の引用符を削除します

于 2012-07-04T08:03:06.667 に答える