正则表达式:使用“/”拆分字符

2024-10-01 17:27:41 发布

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

我有以下字符串,例如: ['2300LO/LCE','2302KO/KCE']

我想要这样的输出: ['2300LO','2300LCE','2302KO','2302KCE']

在Python中如何使用正则表达式

谢谢


Tags: 字符串lcekce
3条回答

您可以制作一个简单的生成器,为每个字符串生成对。然后您可以使用itertools.chain()将它们展平为一个列表

from itertools import product, chain

def getCombos(s):
    nums, code = re.match(r'(\d+)(.*)', s).groups()
    for pair in product([nums], code.split("/")):
        yield ''.join(pair) 

a = ['2300LO/LCE','2302KO/KCE']

list(chain.from_iterable(map(getCombos, a)))
# ['2300LO', '2300LCE', '2302KO', '2302KCE']

这增加了额外的好处,或者可以处理像'2300LO/LCE/XX/CC'这样的字符串,这将给您['2300LO', '2300LCE', '2300XX', '2300CC',...]

这可以通过简单的字符串拆分来实现

由于您使用regex询问输出,下面是您的答案

list1 = ['2300LO/LCE','2302KO/KCE']

import re
r = re.compile("([0-9]{1,4})([a-zA-Z].*)/([a-zA-Z].*)")
out = []
for s in list1:
  items = r.findall(s)[0]
  out.append(items[0]+items[1])
  out.append(items[2])

print(out)

正则表达式的说明-(4位数字),后跟(任何字符),后跟a/和(其余字符)

它们与()一起分组,因此当您使用find all时,它将成为单个元素

您可以尝试以下方法:

list1 = ['2300LO/LCE','2302KO/KCE']
list2 = []

for x in list1:        
    a = x.split('/')

    tmp = re.findall(r'\d+', a[0]) # extracting digits
    list2.append(a[0])
    list2.append(tmp[0] + a[1])

print(list2)

相关问题 更多 >

    热门问题