从网站上提取其他数字的数字列

时间:2013-01-12 21:17:05

标签: regex

生物化学家/生物信息学使用这个网站(http://dgpred.cbr.su.se/index.php?p=TMpred)。输入蛋白质序列后,您会得到类似的结果:

http://dgpred.cbr.su.se/analyze.php?with_length=on&seq=RGFTPLQWECVMASDFGHH

顶部和底部以及中间的一些数据是4列,其中第4列是我们想要的数据。我想从第4列(对于许多蛋白质序列)中取这些数字并放入Excel中。

我当前的工作流程(Mac OS X)是将所有内容复制到富文本文档中的TextEdit,alt +拖动数字(以便只选择第4列中的数字),然后执行AppleScript:

do shell script "pbpaste | sed 's/[^0-9.-]//g' | pbcopy"
do shell script "pbpaste | sed '/^$/d' | pbcopy"

我只是一个正则表达式的初学者,但这成功地留下了一个由换行符分隔的数字列表,准备好粘贴到excel中。

真正的甜蜜就是抛弃TextEdit步骤,让正则表达式直接从网站上获取数字。但是,这超出了我的水平。任何人都可以帮我这个吗?即,仅从第4列中选择数字

2 个答案:

答案 0 :(得分:0)

当我复制这些数据时,我得到了这个结果:

R   1   -9.00           
       +0.03
G   2   -8.00           
       +0.36
F   3   -7.00       
-0.26  

每个奇数行上的3列,以[A-Z]开头,然后是后续行所需的数据。

您想要的数字有两种形式:

^\t {3}([-+][0-9]+\.[0-9]{2})$  //for the red numbers

^([-+][0-9]+\.[0-9]{2}) {3}\t$   //the green numbers

您可以像这样提取两种类型:

^(\t {3})?([-+][0-9]+\.[0-9]{2})( {3}\t)?$

第二个捕获组([-+][0-9]+.[0-9]{2})是您所追求的内容:

s/^(\t {3})?([-+][0-9]+\.[0-9]{2})( {3}\t)?$/$2/g

而不是Applescript,请考虑BBEdit或Textwrangler,您可能会发现它更容易使用。

将其放在搜索栏中:

\r[A-Z].*\r(\t {3})?([-+][0-9]+.[0-9]{2})( {3}\t)?$

,这在替换中:

\ r \ 2

选择“全部替换”


如何运作

 \r        //  carriage return
 [A-Z]     //  any character from A to Z (the lines you DON't want all start with a letter)
 .         // any character
 *         // any number of times
 \r        // carriage return   
           // that deals with the lines you DON't want to keep
 (         // grouping
 \t        // tab character
  {3}      // space character repeated 3 times
 )         // close grouping
 ?         // zero or one occurences of the previous grouping
 (         // grouping (this is the bit you are after)
 [+-]      // character class - one of any of the [enclosed characters]
 [0-9]     // one of any of 0-9
 +         // repeated one or  more times
 \.        // full stop (escaped as it has special meaning in regext)
 [0-9]{2}  // exactly two occurences of any of 0-9
 )         // close capture parens (end of the group you are after)
 ( {3}\t)? // 3 spaces followed by a tab, occurring 0 or 1 time.
 $         // end of line  (in BBEdit/textwrangler you often use \r)
BBE / TW中的

重要详细信息,捕获的组称为\ 1,\ 2,\ 3,而不是$ 1,$ 2,$ 3 ......

答案 1 :(得分:0)

我注意到浏览器以不同方式复制表。当我想从网页上复制表格数据时,我倾向于尝试使用IE / Chrome / Opera浏览器,因为 - 至少在Windows上 - 我只需将复制的表格直接粘贴到Excel中,并保留所有列。另一方面,Firefox往往会搞砸桌子。

使用Opera复制有问题的表并从单元格A1粘贴到Excel中,我得到F列中的所有绿色数字和H列中的红色。然后在第1行右侧的列中键入以下公式将单元格的角向下拖动以复制后续行:

=IF(AND(ISBLANK(F1), ISBLANK(H1)), "", IF(ISBLANK(F1), H1, F1))

现在在这个新专栏中,我看到了数据。我可以在原始数据的顶部粘贴一个新表格,然后右边的公式重新计算。 (其他浏览器的实际列可能不同。)

我承认这不是一个完全自动化的解决方案,但我发现这种方法在很多情况下都是快速有用的,我觉得值得分享。并且座右铭:如果您首选的浏览器没有做正确的事情,请尝试另一个!