从python中的String中提取整数部分

时间:2015-02-03 03:53:00

标签: python regex

假设我有一个像gi|417072228|gb|JX515788.1|这样的字符串。我需要使用417072228从中提取数字部分python。如何从字符串中拆分该部分?我应该使用正则表达式吗?

任何人都可以帮我吗?提前谢谢..

4 个答案:

答案 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)