python中的正则表达式模式和列表

2024-10-02 10:31:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经搜索了很多其他的帖子,虽然有一些有用的提示,但我还没有发现类似的问题,所以我想我会问。 我已生成以下列表:

data2 = ['AN1_OUT,24','AN2_OUT,13','AN3_OUT,14','AN4_OUT,15']

我想做的是确定设置(AN1\u OUT等)和伴随它的值(2,13等)。我已经成功地通过使用旧的'if elif'识别了这个设置,因为我只需要知道这个设置,但是,我现在需要分离出这个值。到目前为止,我使用的是:

data3 = re.findall('[0-9]{2}',data2[i])
byte1 = map(lambda n: int(n[:2]),data3)

这是一个for循环,该循环贯穿data2列表中的所有元素(本例中为4)。对于每一个“我”,我得到以下信息:

[24]
[13]
[14]
[15]

我知道这正是我所期望的,但是,当值是单个数字时,问题就出现了,例如:

'AN1_OUT,2' 

在这种情况下,我错过了该值,它没有打印。我尝试将data3函数中的regex更改为:

data3 = re.findall('[0-9]{1,2}',data2[i])

但是,问题是它会在1\u OUT、2\u OUT等中提取数字。。所以我的结论是:

[1,2]
[2,13]
[3,14]
[4,15]

我已经研究了各种不同的方法来解决这个问题,但事实证明这是非常难以捉摸的。任何帮助都将不胜感激。你知道吗


Tags: re列表if数字out帖子我会elif
3条回答

在末尾附加$,使其仅与输入字符串的末尾匹配:

'[0-9]{1,2}$'

您可以使用\d而不是[0-9]

'\\d{1,2}$'

要避免转义,请使用原始字符串(r'raw string'):

r'\d{1,2}$'

>>> re.findall(r'\d{1,2}$', 'AN3_OUT,14')
['14']

>>> re.findall(r'\d+$', 'AN3_OUT,14')
['14']

您可以使用look behind获取前面带有逗号的数字。另外,您可以使用[0-9]+而不是[0-9]{1,2},因为您可以有更多的数字。你知道吗

data3 = re.findall(r'(?<=,)[0-9]+',data2[i])

您可以解析所描述的字符串,而不必使用正则表达式。就用逗号分开!你知道吗

for item in data2:
    setting, value = item.split(',')
    if setting == 'AN1_OUT':
        value = int(value)
        # do stuff with value

相关问题 更多 >

    热门问题