Podmiana regexpa.

0

Witam.
Mam pliczek .cpp i potrzebuje w nim znaleźć konkretnego regexpa i od razu dowiedzieć się ile ile znaków było od początku linii do tego regexpa. Przedstawię przykład, będzie łatwiej zrozumieć:

W pliku .cpp mam coś takiego:

if( m_Variable->functionCall() == CONST_VARIABLE )

Chce to zamienić na:

if( m_Variable->functionCall() == CONST_VARIABLE ) ||
  ( m_Variable->function_Call() == OTHER_CONST_VARIABLE)

Napisałem skrypt który znajduje mi: ( m_Variable->functionCall() == CONST_VARIABLE ) wtedy podmienia to na:

if( m_Variable->functionCall() == CONST_VARIABLE ) ||
( m_Variable->function_Call() == OTHER_CONST_VARIABLE)

Ale niestety nie ma odpowiedniego wcięcia w drugiej linii. Czasem są takie sytuacje, że warunek jest bardziej skomplikowany i wcięcie jest większe. Jak sprawdzić jakia jest odległość znalezionego regexpa od początku linii?

Dzięki,
Pozdrawiam

0

Oto funkcja, która zwraca prefix lini z dopasowanym regexem:

import re

def get_line_prefix(pattern, text):
    matched = re.search(pattern, text)
    if matched:
        prefix_end = matched.start()
        prefix_start = text.rfind('\n', None, prefix_end)
        return text[prefix_start+1:prefix_end]
    raise LookupError()

Poniżej również dołączam testy tej funkcji na wypadek, gdyby coś trzeba było poprawić:

import unittest

class GetLinePrefixTest(unittest.TestCase):

    def test_not_found(self):
        self.assertRaises(LookupError, get_line_prefix, r'AAA', '')

    def test_empty_prefix_in_first_line(self):
        self.assertEqual('', get_line_prefix(r'AAA', 'AAA  bcde'))

    def test_not_empty_str_in_first_line(self):
        self.assertEqual('example', get_line_prefix(r'AAA', 'exampleAAA  bcde'))

    def test_empty_str_in_next_line(self):
        self.assertEqual('', get_line_prefix(
            r'MMM', 'exampleZZZ  bcde\nMMM'
        ))

    def test_not_empty_str_in_next_line(self):
        self.assertEqual('fooboo ', get_line_prefix(
            r'MMM', 'exampleZZZ  bcde\nfooboo MMM'
        ))

unittest.main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0