首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从网站中提取包含其他数字的数字列

从网站中提取包含其他数字的数字列
EN

Stack Overflow用户
提问于 2013-01-13 05:17:05
回答 2查看 153关注 0票数 3

有一个供生物化学家/生物信息学使用的网站(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 )是在一个富文本文档中将所有内容复制到TextEdit,在数字周围执行alt+drag (这样只选择第四列中的数字),然后执行AppleScript:

代码语言:javascript
复制
do shell script "pbpaste | sed 's/[^0-9.-]//g' | pbcopy"
do shell script "pbpaste | sed '/^$/d' | pbcopy"

我只是regex的初学者,但这成功地给我留下了一个用换行符分隔的数字列表,准备粘贴到excel中。

真正甜蜜的做法是放弃TextEdit步骤,让正则表达式直接从网站获取数字。然而,这超出了我的能力范围。有人能帮我这个忙吗?即,仅选择第4列中的数字

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-13 05:43:23

当我复制这个数据时,我会得到这样的结果:

代码语言:javascript
复制
R   1   -9.00           
       +0.03
G   2   -8.00           
       +0.36
F   3   -7.00       
-0.26  

在每个奇数行上有3列,从[A-Z]开始,然后是您想要在后续行上的数据。

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

代码语言:javascript
复制
^\t {3}([-+][0-9]+\.[0-9]{2})$  //for the red numbers

和:

代码语言:javascript
复制
^([-+][0-9]+\.[0-9]{2}) {3}\t$   //the green numbers

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

代码语言:javascript
复制
^(\t {3})?([-+][0-9]+\.[0-9]{2})( {3}\t)?$

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

代码语言:javascript
复制
s/^(\t {3})?([-+][0-9]+\.[0-9]{2})( {3}\t)?$/$2/g

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

在搜索字段中输入以下内容:

代码语言:javascript
复制
\r[A-Z].*\r(\t {3})?([-+][0-9]+.[0-9]{2})( {3}\t)?$

在替换中是这样:

\r\2

选择“全部替换”

它是如何工作的

代码语言:javascript
复制
 \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…

票数 0
EN

Stack Overflow用户

发布于 2013-01-13 07:22:02

我注意到浏览器复制表的方式不同。当我想从网页上复制表格数据时,我倾向于尝试IE/Chrome/Opera浏览器,因为--至少在Windows上--我可以简单地将复制的表格直接粘贴到Excel中,并保留所有列。另一方面,Firefox往往会把表格弄得乱七八糟。

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

代码语言:javascript
复制
=IF(AND(ISBLANK(F1), ISBLANK(H1)), "", IF(ISBLANK(F1), H1, F1))

现在,在这个新列中,我看到了数据。我可以在原始数据上粘贴一个新的表格,并将公式重新计算到正确的位置。(其他浏览器的实际列可能不同)。

我承认这不是一个完全自动化的解决方案,但我发现这种方法在许多情况下都是快速和有用的,所以我认为它值得分享。座右铭是:如果一开始你选择的浏览器没有做正确的事情,那就换一个吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14298031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档