Hướng dẫn what is the best way to split a string in python? - cách tốt nhất để tách một chuỗi trong python là gì?

Gọi phân chia nhiều lần có khả năng là không có khả năng, bởi vì nó có thể tạo ra các chuỗi trung gian không cần thiết. Sử dụng một regex như bạn đề xuất sẽ không hoạt động, vì nhóm bắt giữ sẽ chỉ nhận được mục cuối cùng, không phải mọi người trong số họ. Tách bằng cách sử dụng một regex, như OBMARG được đề xuất, dường như là con đường tốt nhất, giả sử danh sách "phẳng" là những gì bạn đang tìm kiếm.

Nếu bạn không muốn một danh sách phẳng, bạn có thể chia bằng cách sử dụng Regex trước và sau đó lặp lại kết quả, kiểm tra đầu vào ban đầu để xem dấu phân cách nào đã được sử dụng:

items = re.split(r'\||<>', input)
offset = 0
for i in items:
    delimiter = '|' if input[offset+len(i)] == '|' else '<>'
    offset += len(i) + len(delimiter)
    # Do something with i, depending on whether | or <> was the delimiter

Cuối cùng, nếu bạn không muốn các nền tảng được tạo ra (ví dụ chỉ sử dụng các chỉ số bắt đầu và kết thúc để tiết kiệm không gian),

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
0 có thể thực hiện công việc. Lặp lại các dấu phân cách và làm điều gì đó với văn bản giữa chúng tùy thuộc vào dấu phân cách nào (
split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
1 hoặc
split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
2) đã được tìm thấy. Đó là một hoạt động phức tạp hơn, vì bạn sẽ phải xử lý nhiều trường hợp góc, nhưng có thể đáng giá tùy thuộc vào nhu cầu của bạn.

Cập nhật: Đối với trường hợp cụ thể của bạn, trong đó định dạng đầu vào đồng nhất, các giải pháp của Obmarg là tốt nhất. Nếu bạn phải, sau xử lý kết quả để có một danh sách lồng nhau: for your particular case, where the input format is uniform, obmarg's solutions is the best one. If you must, post-process the result to have a nested list:

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]

.

Cập nhật 2: Sau khi đọc câu hỏi cập nhật, cuối cùng tôi cũng hiểu những gì bạn đang cố gắng đạt được. Đây là ví dụ đầy đủ, sử dụng khung được đề xuất trước đó: After reading the updated question, I finally understood what you're trying to achieve. Here's the full example, using the framework suggested earlier:

items = re.split(r'\||<>', input) # Split input in items
offset = 0
result = [] # The result: strings for regular itens, lists for <> separated ones
acc = None
for i in items:
    delimiter = '|' if offset+len(i) < len(input) and input[offset+len(i)] == '|' else '<>'
    offset += len(i) + len(delimiter)
    if delimiter == '<>': # Will always put the item in a list
        if acc is None:
            acc = [i] # Create one if doesn't exist
            result.append(acc)
        else:
            acc.append(i)
    else:
        if acc is not None: # If there was a list, put the last item in it
            acc.append(i)
        else:
            result.append(i) # Add the regular items
        acc = None # Clear the list, since what will come next is a regular item or a new list
print result

Đã kiểm tra nó với ví dụ của bạn, kết quả là:

['a', 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c','de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'aha'],
 'b', 'c', 'de', ['f', 'ge', 'ah']]

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về phương thức phân chia chuỗi python () với sự trợ giúp của các ví dụ.

Phương thức

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
6 phá vỡ một chuỗi ở dấu phân cách được chỉ định và trả về một danh sách các chuỗi.

Thí dụ

text = 'Python is a fun programming language'

# split the text from space print(text.split(' '))

# Output: ['Python', 'is', 'a', 'fun', 'programming', 'language']

Cú pháp của Chuỗi chia ()

Cú pháp của

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
6 là:

str.split(separator, maxsplit)

Chia () tham số

Phương thức

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
6 mất tối đa 2 tham số:

  • phân tách (tùy chọn)- DELIMITER tại đó xảy ra sự chia tách. Nếu không được cung cấp, chuỗi được chia tại khoảng trắng. (optional)- Delimiter at which splits occur. If not provided, the string is splitted at whitespaces.
  • MaxSplit (Tùy chọn) - Số lượng phân tách tối đa. Nếu không được cung cấp, không có giới hạn về số lượng chia tách. (optional) - Maximum number of splits. If not provided, there is no limit on the number of splits.

chia () giá trị trả về

Phương thức

split_result = re.split( "\||<>", input )
result = [split_result[0], split_result[1], [i for i in split_result[2:] if i]]
6 trả về một danh sách các chuỗi.


Ví dụ 1: Làm thế nào chia () hoạt động trong Python?

text= 'Love thy neighbor'

# splits at space

print(text.split())

grocery = 'Milk, Chicken, Bread' # splits at ','

print(grocery.split(', '))

# Splits at ':' print(grocery.split(':'))

Đầu ra

['Love', 'thy', 'neighbor']
['Milk', 'Chicken', 'Bread']
['Milk, Chicken, Bread']

Ví dụ 2: Làm thế nào chia () hoạt động khi MaxSplit được chỉ định?

grocery = 'Milk, Chicken, Bread, Butter'

# maxsplit: 2

print(grocery.split(', ', 2))

# maxsplit: 1 print(grocery.split(', ', 1)) # maxsplit: 5

print(grocery.split(', ', 5))

# maxsplit: 0 print(grocery.split(', ', 0))

Đầu ra

['Milk', 'Chicken', 'Bread, Butter']
['Milk', 'Chicken, Bread, Butter']
['Milk', 'Chicken', 'Bread', 'Butter']
['Milk, Chicken, Bread, Butter']

Ví dụ 2: Làm thế nào chia () hoạt động khi MaxSplit được chỉ định?