如果之前出现过字符,则不要修改字符串

Don't modify string if a character appeared previously

我有一个看起来像这样的字符串:

street.Random, street.Randomer: 2, 4

我需要拆分成:

street.Random 
street.Randomer: 2, 4

不能第一次出现,因为它们的数量可以是随机的。

我研究了一种侦探方法,如果 : 最近(或根本没有)出现在字符串中,然后根据它以某种方式拆分它,但不确定如何拆分。

按照以下5个步骤:-

  1. 在“:”处拆分字符串并将生成的拆分结果的第一个元素保存在另一个字符串 (s1) 中。
  2. 在 spaces 处拆分字符串 s1,并将倒数第二个元素保存在另一个字符串 (s2) 中。
  3. 打印 s1 的所有元素(拆分 s1 之后),每个元素之间有一个 space,直到倒数第二个元素。
  4. 在与步骤 3 相同的行中打印字符串 s2 直到倒数第二个字符(省略逗号 (,))。
  5. 拆分原始字符串(在 space 处)并在新行上打印最后三个元素,它们之间有 space。

为了更好地理解上述步骤,下面是代码片段:

    s = 'street.Random, street.Random2, street.Random3, street.Randomer: 2, 4'
    s1 = s.split(':')[0]                                          # Step 1
    s2 = s1.split()[-2]                                           # Step 2
    print(' '.join(i for i in s1.split()[:-2]), end = ' ')        # Step 3
    print(s2[:-1])                                                # Step 4
    print(' '.join(s.split()[-3:]))                               # Step 5

将第 3 方 regex 模块与 (*SKIP)(*FAIL) 一起使用:

import regex
s = 'street.Random, street.RandomTwo, street.Randomer: 2, 4'
print(regex.split(r'\d,(*SKIP)(*FAIL)|,',s))

输出:

['street.Random', ' street.RandomTwo', ' street.Randomer: 2, 4']

a demo on regex101.com

您可以计算 , 的数量,直到第一个 :,然后使用 maxsplit=count 参数执行 str.split()

s = 'street.Random, street.RandomTwo, street.Randomer: 2, 4'

count = 0
for ch in s:
    if ch == ':':
        break
    elif ch == ',':
        count += 1

print( [*map(str.strip, s.split(',', maxsplit=count))] )

打印:

['street.Random', 'street.RandomTwo', 'street.Randomer: 2, 4']