Вставить строку, основанную на различном количестве вхождений строк в Python - PullRequest
0 голосов
/ 31 октября 2019

Я надеюсь, что кто-то может помочь мне со следующим.

Предположим, у меня есть следующий текст (точнее - фрагмент кода из латексной таблицы).

  • text = "Некоторые & случайные & содержимое \ Некоторые & далее & content \ …. "

Далее, я хотел бы разместить строку внутри текста на основе двух входных факторов, внутри текста, где один указывает строкуна основе \ и другого столбца на основе &.

Так что в случае пары (1,1) строка должна быть помещена до первого вхождения \ и первогопоявление &. (1, 1, «ЗДЕСЬ», текст) в качестве входных данных должен возвращать:

  • ЗДЕСЬ некоторые и не цветные & контент \ Некоторые & далее & контент \….

И для (2, 2, «ЗДЕСЬ», текст) должно возвращаться

  • Некоторые и не цветные и содержание \ Некоторые & ЗДЕСЬ &содержание \….

В идеале функция также должна принимать несколько пар со входами, поэтому с 1,1 и 2,2 в качестве входа:

  • ЗДЕСЬ и нецветной & контент \ Некоторые & ЗДЕСЬ дальнейшие & контент \….

должно быть результатом.

Мой нынешний подход не рассматривает и \ и отличается. и ЗДЕСЬ не появляется спереди.


text = "Some & random & content \\ Some & further & content \\ …. "

def replacenth(string, sub, wanted, n):
    pattern = re.compile(sub)
    where = [m for m in pattern.finditer(string)][n-1]
    before = string[:where.start()]
    after = string[where.start():]
    newString = before + wanted + after
    return newString

replacenth(text, "[&\\+]", "HERE" , 2)

#output: 
#'Some & random HERE& content \\ Some & further & content \\ …. '

1 Ответ

1 голос
/ 01 ноября 2019

Может быть, что-то вроде этого. Используя str.split и str.join . Не проверять на неправильность ввода.

def replace(string, sub, row_col_pairs):
    rows = string.split(' \\ ')
    for row, col in row_col_pairs:
        cells = rows[row-1].split(' & ')
        cells[col-1] = sub+cells[col-1]
        rows[row-1] = ' & '.join(cells)
    return ' \\ '.join(rows)

replace(text, "HERE", [(1, 3), (2, 2)])

# output
# Some & random & HEREcontent \ Some & HEREfurther & content \ ….
...