0

我是正则表达式的新手,需要通过一次读取一个条目来提取“Chr”数字。

例如,对于以下数据:

Chr6_clust92082
Chr7_clust13
Chr7_clust256
Chr7_clust3678
Chr7_clust42
Chr7_clust5
Chr7_clust130538

第一个条目应该返回“6”,因为它就在“Chr”之后和“_”之前。请为此建议特定的正则表达式。

4

4 回答 4

2

如果要匹配多次,最好编译模式:

c = re.compile('Chr(\d)_')

如果你可以有大于 9 的 chr-numbers,它应该是:

c = re.compile('Chr(\d*)_')

那么你会这样做:

t = 'Chr6_clust92082'
n = int(re.match(c, t).groups()[0])

当然,只需更改每次迭代的 t 即可。

尽管您要求使用正则表达式,但由于该模式非常简单,因此可能值得使用:

n = int(t.split("_",1)[0][3:])

我为你的模式的 1110000 个字符串(不要问我为什么)计时,它花了 8.8 秒,而正则表达式版本花了 21.4 秒。

于 2012-05-12T20:00:34.620 回答
0

你可以写这个正则表达式:

re.match('Chr(\d+)_.*','Chr6_clust92082')
于 2012-05-12T19:48:42.187 回答
0

这不是 stackoverflow 上欢迎的问题类型。没有人会做你的工作。您需要的正则表达式真的很容易找到。

我建议你这个在线工具:http ://www.gskinner.com/RegExr/

查找正则表达式有很大帮助

于 2012-05-12T19:48:52.293 回答
0

使用以下,即使有多个数字,它也会看起来 -

re.findall(r'^Chr([\d]+)_', 'Chr6_clust92082')[0]
于 2012-05-12T19:56:27.910 回答