2017-08-08 7 views
0

私はRプログラミング言語を使用しています。 私は大文字のhtmlテーブルで太字の4つの文字(アミノ酸、あなたが好奇心であれば)を見つけて、大胆にしたいと考えています。私はhtmlテーブルのナビゲーションを通じてこれをやりたい通常の文字列に正規表現を使用していた場合は、 "([KR]。[ST] [ILV])"となります。これは、例えば、RSSIまたはKATVの文字を見つけるでしょう。残念ながら、私が探している実際の文字列は次のようになります。htmlテーブルで4つの文字を見つけて太字にする方法

<center><table class="sequence-table"><tr><th align="left"> 
<tr> 
<td bgcolor="lightgreen"><tt>R</tt></td> 
<td bgcolor=""><tt>S</tt></td> 
<td bgcolor="pink"><tt>S</tt></td> 
<td bgcolor=""><tt>I</tt></td> 

私が欲しい最終結果はこれです:

<center><table class="sequence-table"><tr><th align="left"> 
<tr> 
<td bgcolor="lightgreen"><tt><b>R</b></tt></td> 
<td bgcolor=""><tt><b>S</b></tt></td> 
<td bgcolor="pink"><tt><b>S</b></tt></td> 
<td bgcolor=""><tt><b>I</b></tt></td> 

私はこれを見つけるためにモンスターサイズの正規表現を書きましたシーケンス(以下に添付)が動作していないようです。そして今、私はhtmlコマンドを使用すべきであることを認識していますが、私は検索と置換の方法を教えてくれるWebサイトを見つけるのに苦労しています。私は何を探していますか?そして/または私は上記のことをどのように達成するでしょうか?

これは私が望むシーケンスを見つけるための私の怪物サイズの正規表現ですが、動作しないようです。私は今、間違った方向からそれに向かっていたことを認識しています。

`regexp <- '(
[\\<<td bgcolor=""><tt>K</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>K</tt></td>\\> 
\\<<td bgcolor=""><tt>R</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>R</tt></td>\\>] 
[\\<<td bgcolor=""><tt>.</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>.</tt></td>\\>] 
[\\<<td bgcolor=""><tt>S</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>S</tt></td>\\> 
\\<<td bgcolor=""><tt>T</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>T</tt></td>\\>] 
[\\<<td bgcolor=""><tt>I</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>I</tt></td>\\> 
\\<<td bgcolor=""><tt>L</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>L</tt></td>\\> 
\\<<td bgcolor=""><tt>V</tt></td>\\> 
\\<<td bgcolor="\\w+"><tt>V</tt></td>\\>])' 
` 
+0

あなたは[同じ質問](https://stackoverflow.com/questions/45575344/how-to-find-and-bold-a-series-of-four-letters-inを要求していません-an-html-table-this-post-has-be)2時間前に? –

+0

質問の焦点を変更するために編集しました。私が今質問した質問に言及していなかったので、私はそれが重複としてそれをマークするラベルについて何をすべきか分からなかった。私は何をすべきか聞いてみたい! –

答えて

1

たぶん、正規表現の代わりにこの方法を試してみてください。

library(xml2) 
library(tidyverse) 
txt <- '<center><table class="sequence-table"><tr><th align="left"> 
<tr> 
<td bgcolor="lightgreen"><tt>R</tt></td> 
<td bgcolor=""><tt>S</tt></td> 
<td bgcolor="pink"><tt>S</tt></td> 
<td bgcolor=""><tt>I</tt></td>' 
needles <- c("RSSI", "KMSV") 
doc <- read_html(txt) 
doc %>% 
    xml_find_all("//tr") %>% 
    keep(xml_text(.) %in% gsub("(.)", "\\1\n", needles)) %>% 
    xml_find_all("td/tt/text()") %>% 
    xml_add_parent("b") 
write_html(doc, tf <- tempfile(fileext = ".html")) 
shell.exec(tf) # open temp file on windows 

これは<b>...</b>に、各列のテキストをラップ(一時ファイルに結果が保存されます)。

cat(as.character(doc)) 
# ... 
# <center><table class="sequence-table"> 
# <tr><th align="left"> 
# </th></tr> 
# <tr> 
# <td bgcolor="lightgreen"><tt><b>R</b></tt></td> 
# <td bgcolor=""><tt><b>S</b></tt></td> 
# <td bgcolor="pink"><tt><b>S</b></tt></td> 
# <td bgcolor=""><tt><b>I</b></tt></td> 
# ... 
+0

これは素晴らしいです、ありがとう!私はそれをより一般化することができたかどうか、まだ少しは止まっています。例えば、私は私のプログラムも S Mを K を見つけたコードを見つけたいです V。 (bgcolorと文字列の両方の変更に注意してください) –

+1

しかし、なぜ正規表現を使ってHTMLを解析したいのですか?(https://stackoverflow.com/a/1732454/903061)(+1、良い答え) – Gregor

+0

@RobinRounthwaite Hmなので、特定のx文字の行だけを太ってみたいですか?私の編集と新しい「針」変数を参照してください。たぶん、より良い/より効率的な方法があります。 Thx Gregor btw。 :) – lukeA

関連する問題