конвертировать много строк, если условия как одну строку, используя регулярное выражение Python в файле AC - PullRequest
1 голос
/ 21 марта 2019

У меня есть AC-файл, где мне нужно конвертировать многострочные условия в одну строку в одном файле.Может показаться, что в этом нет необходимости, но мне понадобится одна строка, так как я хочу добавить или удалить условие из этого условия, если позже будет использовать regx python.

Я мог бы использовать re.findall из шаблона re.compile(r'if\s*?\(.*?\{', re.DOTALL), чтобы соответствовать всем условиям и преобразовать как одну строку в списке, но я не мог вернуть это обратно в тот же файл.

из файла c

   if ((condition_1 == condition_2) ||
       (condition_3 == condition_4) ||
       (condition_6 == condition_5) ||
       (condition_7 == condition_8) ) // XYZ_variable
   {
      some text
      if((condition_1 == condition_2) ||
         (condition_3 == condition_4))
      {
        some texts..

        if (condition)
        {
           some texts

как одна строка в том же файле c.

1 Ответ

1 голос
/ 22 марта 2019

Вы можете использовать

re.sub(r'^\s*if\s*\(.*?{', lambda x: re.sub(r'[^\S\r\n]*[\r\n]\s*', ' ', x.group()), s, flags=re.S|re.M)

См. Демо Python и демо regex .

Подробнее

  • ^ - начало строки (из-за флага re.M)
  • \s* - 0+ пробелов
  • if - if слово
  • \s* - 0+ пробелов
  • \( - ( char
  • .*? - любые 0+ символов, как можно меньше (из-за re.S, . соответствует любому символу)
  • { - { char.

Соответствие передается лямбда-выражению, x является MatchData объектом. re.sub(r'[^\S\r\n]*[\r\n]\s*', ' ', x.group()) заменяет пробелом следующие подстроки:

  • [^\S\r\n]* - 0+ символов, кроме непробельных, CR и LF (соответствует «горизонтальным» пробелам)
  • [\r\n] - символ перевода строки
  • \s* - любые 0+ пробелов.

См. это демо регулярных выражений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...