Regex 使用其他数字从网站中提取数字列
有这个网站http://dgpred.cbr.su.se/index.php?p=TMpred 生物化学家/生物信息学使用的。输入一个蛋白质序列后,你会得到如下结果: 在顶部和底部,中间的数据是4列,其中第四是我们想要的数据。我想从第四列中获取大量蛋白质序列的数字,然后输入Excel 我当前的工作流程Mac OS X是将所有内容复制到富文本文档中的TextEdit,按住alt键并拖动数字,以便只选择第4列中的数字,然后执行我的AppleScript:Regex 使用其他数字从网站中提取数字列,regex,Regex,有这个网站http://dgpred.cbr.su.se/index.php?p=TMpred 生物化学家/生物信息学使用的。输入一个蛋白质序列后,你会得到如下结果: 在顶部和底部,中间的数据是4列,其中第四是我们想要的数据。我想从第四列中获取大量蛋白质序列的数字,然后输入Excel 我当前的工作流程Mac OS X是将所有内容复制到富文本文档中的TextEdit,按住alt键并拖动数字,以便只选择第4列中的数字,然后执行我的AppleScript: do shell script "pbpas
do shell script "pbpaste | sed 's/[^0-9.-]//g' | pbcopy"
do shell script "pbpaste | sed '/^$/d' | pbcopy"
我只是一个正则表达式的初学者,但这成功地为我留下了一个由换行符分隔的数字列表,可以粘贴到excel中
真正甜蜜的做法是放弃文本编辑步骤,让正则表达式直接从网站获取数字。然而,这超出了我的水平。有人能帮我吗?也就是说,复制此数据时,仅选择第4列中的数字,我得到以下结果:
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
以及:
您可以这样提取这两种类型:
^(\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
而不是Apple脚本,考虑BBEDIT或,您可能会发现更容易使用。 将其放入搜索字段:
\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…我注意到浏览器复制表的方式不同。当我想从网页复制表数据时,我倾向于尝试IE/Chrome/Opera浏览器,因为至少在Windows上,我可以简单地将复制的表直接粘贴到Excel中,保留所有列。另一方面,Firefox往往会把桌子弄得一团糟 使用Opera复制有问题的表格并从单元格A1粘贴到Excel中,我得到F列中的所有绿色数字和H列中的红色数字。然后我在第1行右侧的一列中键入以下公式,并向下拖动单元格的角以复制后续行:
=IF(AND(ISBLANK(F1), ISBLANK(H1)), "", IF(ISBLANK(F1), H1, F1))
现在在这个新专栏中,我看到了数据。我可以在原始数据上粘贴一个新表,然后右边的公式会重新计算。其他浏览器的实际列可能不同
我承认这不是一个完全自动化的解决方案,但我发现这种方法在很多情况下都是快速和有用的,所以我觉得值得分享。座右铭是:如果你选择的浏览器一开始做得不对,那就换一个吧 所以你想提取Delta G aai应用程序列,对吗?哇,你很擅长这个。不幸的是,我不是。请问你是怎么办到的?我试图制作一个applescript,这是我所知道的在剪贴板中的文本上运行正则表达式的唯一方法,但它给了我一个语法错误,我不知道applescript的情况——它将在perl或BBEdit的搜索字段中运行。你可能会喜欢BBEdit的精简版,-我认为它是免费的。它将执行grep搜索,并跨文件批进行搜索。@user1461829,请参阅我的更新答案,以及与BBEdit/TextwranglerHuge一起使用的精确说明,谢谢。Applescript可以让我直接从web浏览器转到Excel,而无需在两者之间进行文本编辑。但是,很多时候我在让它们运行时遇到问题。我试过TextWrangler,我真的很喜欢它。你的代码工作得很完美。您的代码中有一些空行,但我刚刚做了一个\r\r\r替换来修复它。然后我开始在TextWrangler中录音,运行查找和替换,现在我变得完美了output@user1461829很高兴它起作用了。抱歉,我以为你有一些手动步骤将所有内容复制到文本编辑。。。。不管怎样,当解决方案奏效时,你能接受答案吗?点击勾号谢谢。真的很感激这个公式。在这种情况下,这对我来说不是一个理想的解决方案,但我有很多类似的情况,这个公式会非常适合我。谢谢
=IF(AND(ISBLANK(F1), ISBLANK(H1)), "", IF(ISBLANK(F1), H1, F1))