$route['login-resgistration'] = 'f/login/index';
$route['my-account'] = 'f/login/myaccount';
$route['(.*)'] = 'data/$1';
我在数据集中有一个如上所示的列。以第一行为例,我想留下的信息是一列包含955563,一列包含G> C.我已经玩了几个我在这里找到的正则表达式,但没有找到一个可以解决这个问题的正则表达式。
答案 0 :(得分:3)
以下适用于您的示例:
df[0].str.extract(':\w\.(\d+)(.+)')
# 0 1
#0 955563 G>C
#1 955597 G>T
#2 955619 G>C
#3 957640 C>T
#4 976059 C>T
#5 37090470 C>T
#6 133256600 G>A
#7 15923 A>G
如果最后一个“列”始终具有A> A结构,其中A是单个字母,那么您可以更具体地使用:
df[0].str.extract(':\w\.(\d+)(\w>\w)')
答案 1 :(得分:1)
':.*\.(\d+)(\w>\w)'
:.*\.
查找:
和任何字符(因为您的示例同时包含'g'和'm'),直到我们想要捕获的区域之前的时间段。
第一组:(\d+)
匹配1位或更多位数。
第二组:(\w>\w)
匹配单词字符,后跟>
,后跟单词字符
答案 2 :(得分:1)
这是没有正则表达式的一种方法。请注意,此解决方案使用Python 3.6(formatted string literals)中的PEP 498。
def splitter(x):
y = x.rsplit('.', maxsplit=1)[-1].split('>')
return int(y[0][:-1]), f'{y[0][-1]}>{y[1]}'
df[['2', '3']] = df[1].apply(splitter).apply(pd.Series)
print(df)
0 1 2 3
0 0 NC_000001.10:g.955563G>C 955563 G>C
1 1 NC_000001.10:g.955597G>T 955597 G>T
2 2 NC_000001.10:g.955619G>C 955619 G>C
3 3 NC_000001.10:g.957640C>T 957640 C>T
4 4 NC_000001.10:g.976059C>T 976059 C>T
5 5 NC_000003.11:g.37090470C>T 37090470 C>T
6 6 NC_000012.11:g.133256600G>A 133256600 G>A
7 7 NC_012920.1:m.15923A>G 15923 A>G