假设我有一个像gi|417072228|gb|JX515788.1|
这样的字符串。我需要使用417072228
从中提取数字部分python
。如何从字符串中拆分该部分?我应该使用正则表达式吗?
任何人都可以帮我吗?提前谢谢..
答案 0 :(得分:2)
看起来你的输入字符串中已经有了分隔符,这使得使用字符串数据类型内置的方法很容易。不需要正则表达式。
for segment in s.split('|'):
if segment.isdigit():
# do your stuff with the number
答案 1 :(得分:1)
将列表理解与re.match
>>> s = "gi|417072228|gb|JX515788.1|"
>>> [i for i in s.split('|') if re.match('^\d+$', i)]
['417072228']
>>> [i for i in s.split('|') if re.match('^\d+$', i)][0]
'417072228'
OR
>>> re.findall(r'(?:\||^)(\d+)(?:\||$)', s)
['417072228']
(?:\||^)
匹配行锚或|
符号的开头。(\d+)
捕获一个或多个数字字符。(?:\||$)
匹配|
符号或行锚点的结尾。 re.findall
函数将首先选择捕获组然后匹配。所以在这里,它只打印组索引1中存在的字符。答案 2 :(得分:1)
好像您的输入是CSV文件中的一行,所以如果您只想要每行中的第二列,您可以这样做:
>>> row = 'gi|417072228|gb|JX515788.1|'
>>> row.split('|')[1]
'417072228'
或访问所有列:
>>> columns = row.split('|')
>>> columns[0]
'gi'
>>> columns[1]
'417072228'
>>> columns[2]
'gb'
>>> columns[3]
'JX515788.1'
答案 3 :(得分:0)
(?:^|(?<=\|))\d+(?=\||$)
您可以将其与re.findall
一起使用。请参阅演示。
https://regex101.com/r/vD5iH9/44
import re
p = re.compile(r'(?:^|(?<=\|))\d+(?=\||$)', re.MULTILINE)
test_str = "gi|417072228|gb|JX515788.1|"
re.findall(p, test_str)