3

テキストから Web サイトを削除する関数を作成しようとしています。私は持っている:

removeWebsites<- function(text){
  text = gsub("(http://|https://|www.)[[:alnum:]~!#$%&+-=?,:/;._]*",'',text)
  return(text)
}

これは問題の大規模なセットを処理しますが、一般的なものではありません。つまり、次のような形式です。xyz.com

.com正規表現の範囲を制限するため、上記の正規表現の最後に追加したくありません。ただし、次のような正規表現をさらに書いてみました。

gsub("[[:alnum:]~!#$%&+-=?,:/;._]*.com",'',testset[10])

これは機能しましたが、フォームの電子メール ID も変更されabc@xyz.comましたabc@。私はこれをしたくないので、私はそれを変更しました

gsub("*((^@)[[:alnum:]~!#$%&+-=?,:/;._]*).com",'\\1',testset[10])

これにより、電子メールIDはそのままになりましたが、フォームのWebサイトの認識が停止しましたxyz.com

ここで説明されている形式の何らかのセットの違いが必要であることは理解していますが、それを実装できませんでした (主に完全に理解できなかったため)。問題を解決する方法について何か考えはありますか?

編集:否定先読みを試しました:

gsub("[[:alnum:]~!#$%&+-=?,:/;._](?!@)[^(?!.*@)]*.com",'',testset[10])

「無効な正規表現」エラーが発生しました。修正の少しの助けがこれを機能させるかもしれないと信じています...

4

2 に答える 2

1

信じられない。実はそれには簡単な解決策があります。

gsub(" ([[:alnum:]~!#$%&+-=?,:/;._]+)((.com)|(.net)|(.org)|(.info))",' ',text)

これは次のように機能します。

  1. スペースから始めます。
  2. 「@」以外のあらゆる種類のものを入力してください。
  3. .com/net/org/info/ で終わる

それを壊すために見てください!これも破綻するケースもあると思います。

于 2013-01-21T10:28:32.967 に答える
0

あなたのルックアラウンドは私には少しおかしいように見えます.文字クラス内で後ろを見ることはできません.なぜあなたは前を見ているのですか? 後ろを見るほうが適切です。テストはしていませんが、次の式が機能するはずです。

gsub("*((?<!@)[[:alnum:]~!#$%&+-=?,:/;._]*).com",'\\1',testset[10])

また、後読みは固定長でなければならないため、乗数は使用できないことに注意してください。

于 2013-01-21T09:57:45.210 に答える