获取python正则表达式的数据

时间:2014-11-04 18:35:19

标签: python regex

我试过找到一个python正则表达式来匹配以下行,并且我感兴趣的是提取" |"之间的每一行的部分。和"。" (在upx之前)。 我的尝试是:

pattern=compile.re(re"^\S+\|(\S+).upx\.+")

但它不起作用

我的数据:

UMM_189|XXYT9888_UMX_5711769.upx_OWED_786_bopsio_34527_sen_72.345615
AMW_126|7010.upx_XAWA01266525261
QEA_234|Serami_bolismun_milte_1_UMM1.upx_YU_168145
MMP_377|723C_UMM_5711781.upx_UXA_2_serax_78120_ser_23.26255277

我的预期输出:

XXYT9888_UMX_5711769
7010
Serami_bolismun_milte_1_UMM1
723C_UMM_5711781

请问更好的想法吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

>>> re.findall(r'\|(.*?)\.',data)
['XXYT9888_UMX_5711769', '7010', 'Serami_bolismun_milte_1_UMM1', '723C_UMM_5711781']

答案 1 :(得分:1)

我不认为Regex在这里是必要的,因为您的数据非常有序。 list comprehension str.splitstr.splitlines就足够了:

>>> data = '''\
... UMM_189|XXYT9888_UMX_5711769.upx_OWED_786_bopsio_34527_sen_72.345615
... AMW_126|7010.upx_XAWA01266525261
... QEA_234|Serami_bolismun_milte_1_UMM1.upx_YU_168145
... MMP_377|723C_UMM_5711781.upx_UXA_2_serax_78120_ser_23.26255277
... '''
>>> [x.split('|', 1)[1].split('.upx', 1)[0] for x in data.splitlines()]
['XXYT9888_UMX_5711769', '7010', 'Serami_bolismun_milte_1_UMM1', '723C_UMM_5711781']
>>>

答案 2 :(得分:0)

import re
your_str = "UMM_189|XXYT9888_UMX_5711769.upx_OWED_786_bopsio_34527_sen_72.345615"
result = re.match(r'^[A-Z]{3}_[0-9]{3}\|(?P<id>[A-Za-z0-9_]*).upx*', your_str)
print result.group('id')

答案 3 :(得分:0)

你有斜线点和向后点。尝试     pattern=compile.re(re"^\S+\|(\S+)\.upx.+")