我试过找到一个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
请问更好的想法吗?
答案 0 :(得分:1)
试试这个:
>>> re.findall(r'\|(.*?)\.',data)
['XXYT9888_UMX_5711769', '7010', 'Serami_bolismun_milte_1_UMM1', '723C_UMM_5711781']
答案 1 :(得分:1)
我不认为Regex在这里是必要的,因为您的数据非常有序。 list comprehension str.split
和str.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.+")