我正在尝试创建一个列表(或字典,不确定哪个更合适),其中包含我输入的值。如果它遵循正确的格式,即两个数字以“;“(123;456; 1334; 451等),然后拆分这两个数字,我该怎么做呢?newlist = [x.split(';') for x in list if x]是我做的,但是输出是[['123', '456'], ['1334', '451'],从某种意义上说是正确的,但是如果我只输入123;;,它会被接受。任何帮助都将不胜感激。
newlist = [x.split(';') for x in list if x]
[['123', '456'], ['1334', '451']
123;;
nnsrf1az1#
您可以在列表解析中添加一个检查,以将if x替换为if len(x.split('::')) == 2。这将只包括分隔符两侧都有值的元素。
if x
if len(x.split('::')) == 2
zu0ti5jz2#
要拒绝例如"789;;abc",请使用.findall()
"789;;abc"
import re from pprint import pp s = "789;;abc apple 123;;101 banana 122;;324 cherry 090;;089 date" two_nums_re = re.compile(r"(\d+);;(\d+)") pp(two_nums_re.findall(s), width=16)
产生:
[('123', '101'), ('122', '324'), ('090', '089')]
如果需要,您可以轻松地替换替代分隔符。
>>> " ".join(f"{a}::{b}" for a, b in two_nums_re.findall(s)) '123::101 122::324 090::089'
2条答案
按热度按时间nnsrf1az1#
您可以在列表解析中添加一个检查,以将
if x
替换为if len(x.split('::')) == 2
。这将只包括分隔符两侧都有值的元素。zu0ti5jz2#
要拒绝例如
"789;;abc"
,请使用.findall()产生:
如果需要,您可以轻松地替换替代分隔符。