1

Rubyでテキスト処理をしています。

私が取り組んでいるいくつかのテキストでは、一重引用符は二重引用符の外にあってはなりません。そこで、単一引用符で囲まれた文字列に一致するが、二重引用符で囲まれた文字列には一致しない RegEx を作成したいので、それらをスクリプトで置き換えることができます。わかる?

したがって、次の例では、文 #1、2、4、6、および 8 は問題ありませんが、文 #3、5、および 7 には誤ってネストされた単一引用符が含まれています。これを交換したいと思います。

  1. これは文です。
  2. これは「二重引用符付き」の文です。
  3. これは「一重引用符付き」の文です。
  4. これは、「ネストされた単一引用符」を使用した文です。時々、『複数』あります。」
  5. これは、「ネストされた二重引用符」を使用した文です。「複数」の場合もあります。
  6. これは、このテキストで一般的な「二重の「閉じ引用符」のない文です。
  7. これは、残念ながら「閉じ引用符」が 1 つもない文です。
  8. ただし、アポストロフィと一致させたくありません。それはうまくいきません。

(太字は、正規表現で作成したい一致を示しているため、引用符を交換できます。)

要点: 私は、すでに引用符が含まれている拡張された文章を引用しようとしています。これには、ダブルスをシングルスと交換する必要があります。

これは可能ですか?私は何時間も試みてきましたが、それを得ることができないようです. どんな助けでも感謝します。

4

2 に答える 2

2

正規表現はこれに適しているとは思いません。自分でテキストをスキャンしてみませんか?

(疑似コード)

for each char in text

    if char is `"`, then ignore until next `"`
    else if char is `'` (and not part of a contraction), then capture until next `'` or `.`

end for

これについては、今後の問題が予想されます。

于 2013-01-04T18:01:48.140 に答える
1

gsubこれは完璧な答えではないかもしれませんが、 #5 で a を次のように使用してみることができます。

a=> This is a sentence 'with a "nested double quote." Sometimes there are "more than one."'
a.gsub(/^[A-Z][a-zA-Z\s]*'[a-zA-Z\s]*(".*")[a-zA-Z\s]*'/) { |m| m.gsub('"',"'")}

# 3 の場合:

a.gsub(/^[A-Z][a-zA-Z\s]*('.*')/) { |m| m.gsub('"',"'")}

などなど。

これらはほんの一例ですが、参考になれば幸いです。使用するデータと正規表現によっては、予期しない結果が得られ、事態を悪化させる方法でデータが変更される可能性があるため、これには細心の注意を払う必要があると思います。いくつかの rspec テストを作成し、非常に大きなサンプルでテストして、これを処理するのに最適な正規表現を試してみてください。

発生する可能性のある別の問題は、段落に含まれている場合に文を識別することです。はるかに複雑になり、NLP などを使用してそれらを識別する必要がある場合があります。

chr()さらに、コードでandを使用することを検討することもできord()ます。

幸運を!

于 2013-01-04T23:10:46.150 に答える