Python 3.x 指定用于拆分字符串的规则

Python 3.x 指定用于拆分字符串的规则,python-3.x,string,split,Python 3.x,String,Split,我正在尝试将一个句子分成三个不同的变量,以便以后使用,我需要指定一些规则,以我需要的方式将其拆分 例句: sentence = 'SUPER Jumper Colour BROWN-8' 从这里我需要三个变量 textBeforeColour = 'SUPER Jumper Colour' Colour = 'BROWN' Size = '8' 注:颜色(棕色-8)始终为大写 颜色(棕色-8)之前的任何内容都可能有一些大写单词,但不是全部 我已经创建了一个脚本,可以做到这一点,但我知道,如果

我正在尝试将一个句子分成三个不同的变量,以便以后使用,我需要指定一些规则,以我需要的方式将其拆分

例句:

sentence = 'SUPER Jumper Colour BROWN-8'
从这里我需要三个变量

textBeforeColour = 'SUPER Jumper Colour'
Colour = 'BROWN'
Size = '8'
注:颜色(棕色-8)始终为大写 颜色(棕色-8)之前的任何内容都可能有一些大写单词,但不是全部

我已经创建了一个脚本,可以做到这一点,但我知道,如果文本稍有更改,脚本将中断。比如说

import re
text = 'SUPER Jumper Colour BROWN-8'
list = text.split()
myList = []
lastWord = list[-1]

for iterating_var in list:
   if iterating_var is not list[-1]: #THIS GIVES ME THE 'BEFORE COLOUR' TEXT
        myList.append(iterating_var)

if lastWord == 'SIZE':
     print('ONE SIZE') #This is used when the Size is not a number but comes as ONE SIZE
else:
    splitText = re.split('-',lastWord)
    print(splitText[0])
    print(splitText[1])
    Colour = splitText[0]
    size = splitText[1]
现在所有这些都起作用了。但是如果字符串将使用颜色:浅蓝色-此脚本将使用语句变量而不是颜色变量保持“LIGHT”

import re
text = "blah Blah LIGHT BLUE-8"

if text.split()[-1] == "SIZE":
    print("ONE SIZE")
else:
    colour = re.findall("([A-Z ]+)-[0-9]$", text)[0][1:]
    print(colour)
    size = int(re.findall("[0-9]+$", text)[0])
    print(size)
    sentence = re.findall("(.*[^A-Z ])[A-Z ]+-[0-9]$", text)[0]
    print(sentence)
颜色:由零个或多个大写字母和空格组成的序列,后跟连字符、零个或多个数字以及字符串的结尾

对于大小:字符串末尾的零或多个数字


对于以下句子:零个或多个字符,然后是非大写字母或空格的字符,然后是颜色的图案

您应该能够在一个带有捕获组的正则表达式中执行此操作:

import re

pat = re.compile(r'^([\w\s]+?)\s+([A-Z\s]+)-(\d+)$')

sentence = 'SUPER Jumper Colour LIGHT BLUE-88'

match = pat.match(sentence)
if match:
    text, color, number = match.groups()
    print(text)    # SUPER Jumper Colour
    print(color)   # LIGHT BLUE
    print(number)  # 88

正则表达式功能强大,但可能会变得复杂。如果你不熟悉它们,

那太完美了!!非常感谢。简单的后续问题-是否有re.findall/split等类的手册?我可以在其中查找这些命令的一部分?很高兴我能提供帮助:)这里有一个很好的列表:明白了,我将进一步了解它们-再次感谢!也很有魅力-谢谢你的帮助。我将研究文档,因为它看起来确实很复杂!你好对原始问题的小修改。我意识到有些句子可能以字母大小结尾,例如(超级跳线颜色棕色-S)或在某些情况下(超级跳线颜色棕色-S/M)。-您知道如何合并这些更改吗?您可以尝试更改最终捕获组
(\d+)
,以捕获所有字符:
(.+)
。谢谢您,它成功了。最后一个问题。我刚刚看到一些句子有不止一个连字符(-),例如“超级酷的棕色S”。出现这种情况时,脚本不会产生任何结果。您可以将连字符添加到第一个字符类中,使其在那里也可以接受:
^([\w\s-]+?)\s+([A-Z\s]+)-(\d+)$
对原始问题进行小的编辑。我意识到有些句子可能以字母大小结尾,例如(超级跳线颜色棕色-S)或在某些情况下(超级跳线颜色棕色-S/M)。-有人知道怎么把这条规则扯进来吗@帕特里克