Лучший способ разделить строку в Python с несколькими разделителями - при этом сохраняя разделители - PullRequest
1 голос
/ 15 мая 2019

Предположим, у меня есть строка:

string = "this is a test string <LW> I want to <NL>split this string<NL> by each tag I have inserted.<AB>"

Я хочу разбить строку по каждому пользовательскому тегу, который я вставил в строку в предыдущей функции:

tags = ["<LW>", "<NL>", "<AB>"]

Это желаемый результат:

splitString = splitByTags(string, tags)

for s in splitString:
    print(s)

выход

"this is a test string <LW>"
" I want to <NL>"
"split this string<NL>"
" by each tag I have inserted.<AB>"

Так что, в основном, я хочу разделить строку на несколько подстрок, сохраняя эти подстроки внутри разбиения. Какой самый быстрый и эффективный способ сделать это? Я знаю, что могу использовать string.split и просто добавить разделенный текст к каждой строке, однако я не уверен, как это сделать с несколькими строками.

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Использование re.split с захватом скобок.

Ex:

import re
string = "this is a test string <LW> I want to <NL>split this string<NL> by each tag I have inserted.<AB>"
tags = ["<LW>", "<NL>", "<AB>"]

splt_str = re.split("(" + "|".join(tags) + ")", string)

for i in range(0, len(splt_str), 2):
    print("".join(splt_str[i:i+2]))

Выход:

this is a test string <LW>
 I want to <NL>
split this string<NL>
 by each tag I have inserted.<AB>
0 голосов
/ 15 мая 2019

Вот несколько примеров, как это сделать:

import re

def split_string(string, tags):
    string_list = []
    start = 0
    for tag in tags:
        tag_index = re.finditer(tag, string)
        for item in tag_index:
            end_tag = item.start() + len(tag)
            string_list.append(string[start:end_tag])
            start = end_tag

    return string_list



data = split_string(string, tags)

Вывод:

['this is a test string <LW>', ' I want to <NL>', 'split this string<NL>', ' by each tag I have inserted.<AB>']
...