我是正则表达式的新手,需要通过一次读取一个条目来提取“Chr”数字。
例如,对于以下数据:
Chr6_clust92082
Chr7_clust13
Chr7_clust256
Chr7_clust3678
Chr7_clust42
Chr7_clust5
Chr7_clust130538
第一个条目应该返回“6”,因为它就在“Chr”之后和“_”之前。请为此建议特定的正则表达式。
如果要匹配多次,最好编译模式:
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 秒。
你可以写这个正则表达式:
re.match('Chr(\d+)_.*','Chr6_clust92082')
这不是 stackoverflow 上欢迎的问题类型。没有人会做你的工作。您需要的正则表达式真的很容易找到。
我建议你这个在线工具:http ://www.gskinner.com/RegExr/
查找正则表达式有很大帮助
使用以下,即使有多个数字,它也会看起来 -
re.findall(r'^Chr([\d]+)_', 'Chr6_clust92082')[0]